nyoj 1184 为了肾六 【dp】
2015-11-28 15:49
585 查看
为了肾六
时间限制:4000 ms | 内存限制:210535 KB难度:2
描述
最近肾六很流行,goshawk看身边的朋友都用上了apple。自己还用着W年前的Samsung。于是决定去IT公司打工,都是为了肾六。现在上司让他解决下面的一个小问题,但是goshawk没学好算法,被这个问题难住了,聪明的你帮帮他吧。
给一个n个整数的序列p1,p2,p3.....pn。你要以下面的方式选k对整数。[l1, r1], [l2, r2], ..., [lk, rk] (1 ≤ l1 ≤ r1 < l2 ≤ r2 < ... < lk ≤ rk ≤ n; ri - li + 1 = m), 为了让这个表达式的值尽可能大
。赶快帮他解决这个问题吧。
输入 第一行包含三个整数n,m,和k(1 ≤ (m × k) ≤ n ≤ 5000)。第二行包含n个整数p1,p2,p3.....pn(0 ≤ pi ≤ 10^9).
输出 单行输出一个整数。最大和的值。 样例输入
5 2 11 2 3 4 57 1 32 10 7 18 5 33 0
样例输出
961
思路:dp[k][i]表示前i个数取k组得到的最大贡献。
dp[k][i] = max(dp[k][i-1], dp[k-1][i-M]+(a[i-M+1] + ...+a[i]))。
用滚动数组优化下就可以了。
AC代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#define INF 0x3f3f3f
#define eps 1e-8
#define MAXN (5000+10)
#define MAXM (100000)
#define Ri(a) scanf("%d", &a)
#define Rl(a) scanf("%lld", &a)
#define Rf(a) scanf("%lf", &a)
#define Rs(a) scanf("%s", a)
#define Pi(a) printf("%d\n", (a))
#define Pf(a) printf("%.2lf\n", (a))
#define Pl(a) printf("%lld\n", (a))
#define Ps(a) printf("%s\n", (a))
#define W(a) while(a--)
#define CLR(a, b) memset(a, (b), sizeof(a))
#define MOD 1000000007
#define LL long long
#define lson o<<1, l, mid
#define rson o<<1|1, mid+1, r
#define ll o<<1
#define rr o<<1|1
using namespace std;
LL sum[MAXN], p[MAXN];
LL dp[2][MAXN];
int main()
{
int N, M, K;
while(scanf("%d%d%d", &N, &M, &K) != EOF)
{
LL ans = 0;
for(int i = 1; i <= N; i++)
{
Rl(p[i]); sum[i] = 0; ans += p[i];
if(i < M)
continue;
for(int j = i; j > i-M; j--)
sum[i] += p[j];
}
if(N == K || M == N)//剪枝
{
Pl(ans);
continue;
}
CLR(dp, 0); ans = 0;
for(int k = 1; k <= K; k++)
{
for(int i = k*M; i <= N; i++)
{
dp[k&1][i] = max(dp[k&1][i], dp[k&1][i-1]);
dp[k&1][i] = max(dp[k&1][i], dp[(k-1)&1][i-M]+sum[i]);
ans = max(ans, dp[k&1][i]);
}
}
Pl(ans);
}
return 0;
}
相关文章推荐
- iOS 数组去重
- 千万级PV网站架构
- 242. Valid Anagram
- CSDN《老友记》简记
- erlang R16B02 服务器进程消失问题
- androguard&yara
- 用java读写properties文件的代码
- “南大软院大神养成计划“_第十三天的学习“
- 啊Ran讲微信开发(.net) 目录结构
- 微信书的分月存储
- 1-3-11:计算浮点数相除的余数
- 寄存器 之 SI DI
- mysql 1292 错误
- collectd简介
- 杭电1592 Half of and a Half 大数
- 选项卡控件(TabControl)的操作
- IIS MVC 发布错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
- 使用new char[]遇到过的几个坑
- Java注解知识点整理
- hashMap的再认识