您的位置:首页 > 大数据 > 人工智能

codeforces 148E Porcelain(DP, 分组背包)

2015-03-09 18:01 477 查看
题意:

有n个数列。要从这n个数列中取m个数,要求值最大。

思路:

每个数列的大小为si, 则可以从中取[1,si]个。

理解了这是一个分组背包的模型后。。就很赤裸了。。

rep(r, 1, n) {
scanf("%d", &t);
rep(i, 1, t) scanf("%d", a+i);

rep(i, 1, t) pre[i] = pre[i-1]+a[i];
rep(i, 1, t) suf[i] = suf[i-1]+a[t-i+1];

rep(i, 1, t) {
v[i] = 0;
rep(j, 0, i) v[i] = max (v[i], pre[j]+suf[i-j]);
}

urep(w, m, 1) {
for (int i=1;i<=t && i<=w;++i)
dp[w] = max (dp[w], dp[w-i] + v[i]);
}
}
printf("%d", dp[m]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: