hdu 1712 ACboy needs your help(分组01背包)
#include <stdio.h>
#include <string.h>
#define MAXN 10005
#define MAXM 105
struct GNode
{
int weight;
int value;
};
GNode group[MAXN][MAXN];
int M, len[MAXN];
int f[MAXN];
inline int getMax(int a, int b) { return a > b ? a : b; }
void dp(const int K)
{
memset(f, 0, sizeof(f));
int i, j, k;
for(k = 1; k <= K; k++)
{
for(j = M; j >= 0; j--)
{
for(i = 0; i < len[k]; i++)
{
if(j >= group[k][i].weight)
{
f[j] = getMax(f[j], f[j - group[k][i].weight] + group[k][i].value);
}
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("indata.txt", "r", stdin);
#endif
int N;
while(scanf("%d %d", &N, &M), N + M)
{
memset(len, 0, sizeof(len));
int i, j;
for(i = 1; i <= N; i++)
{
for(j = 1; j <= M; j++)
{
int v;
scanf("%d", &v);
group[i][len[i]].weight = j;
group[i][len[i]++].value = v;
}
}
/* for(i = 1; i <= N; i++)
{
for(j = 0; j < len[i]; j++)
{
printf("(%d %d %d) ", i, group[i][j].weight, group[i][j].value);
}
printf("\n");
}
printf("\n");*/
dp(N);
printf("%d\n", f[M]);
}
return 0;
}
浙公网安备 33010602011771号