题意:
有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]);