首页 > 代码库 > codeforces George and Job
codeforces George and Job
1 /* 2 题意:给一个长度为n的序列, 从中选择长度为m的k个区间(任意两个区间不会有公共部分) 3 使得所选择的区间的和最大! 4 思路:这是一种很常见的dp 5 6 dp[i][j] 表示的是前 i 个数选择 j 个 长度为m区间的最大和! 7 s[i]记录的是前 i 个数字的和! 8 dp[i][j] = max( dp[i - 1][j], dp[i - m][j - 1] + s[i] - s[i-m] ); 9 */10 #include<iostream>11 #include<cstdio>12 #include<cstring>13 #include<algorithm>14 #define N 500515 using namespace std;16 typedef long long ll;17 18 ll dp[N][N];19 ll s[N];20 21 int main(){22 int n, m, k;23 scanf("%d%d%d", &n, &m, &k);24 for(int i = 1; i <= n; ++i){25 scanf("%lld", &s[i]);26 s[i] += s[i-1];27 }28 29 for(int j = 1; j <= k; ++j)30 for(int i = j*m; i <= n; ++i)31 dp[i][j] = max( dp[i - 1][j], dp[i - m][j - 1] + s[i] - s[i-m] );32 33 printf("%lld\n", dp[n][k]);34 35 return 0; 36 }
codeforces George and Job
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。