题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712
解释看这里:http://www.cnblogs.com/zhangmingcheng/p/3940332.html
这题之前竟然做过,竟然不记得了,做了一个小时,竟然没A,(我连分组背包干什么的都忘了)
这题的博客以前也写过,我重新写这篇博客,就是提醒自己一下。
代码:
#include <iostream>
using namespace std;
int a[][],f[];
int main()
{
int n,m,i,j,k;
while(cin >> n >> m && (n != || m != ))
{
memset(f,,sizeof(f));
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
cin >> a[i][j];
for(i = ; i <= n; i++) //第一重循环:分组数
for(j = m; j >= ; j--) //第二重循环:容量体积
for(k = ; k <= j; k++) //第三重循环:属于i组的k
f[j] = max(f[j],f[j-k]+a[i][k]);
cout << f[m] << endl;
}
return ;
}