HDU1712http://acm.hdu.edu.cn/showproblem.php?pid=1712
简单的分组背包
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
#define mem(a) memset(a,0,sizeof(a)) typedef long long LL;
const double eps = 1e-;
const int MAXN = ;
const int MAXM = ; int f[],w[][];
int n,m;
int max(int a,int b)
{
return a>b?a:b;
}
void Zero_One_pack(int k)//
{
for(int i=m;i>=;i--)
for(int j=;j<=m&&i>=j;j++)
f[i]=max(f[i],f[i-j]+w[k][j-]);
}
int group_pack()
{
mem(f);
for(int i=;i<n;i++)
Zero_One_pack(i) ;
return f[m];
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(!m&&!n)break;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
scanf("%d",&w[i][j]);
printf("%d\n",group_pack());
}
return ;
}