hdu1712: 题意:输入课程数n和总天数m,再输入矩阵n*m,v[i][j]表示花费j天在课程i上得到价值为v[i][j]解法:分组背包问题:组数为n,总容量为m,每件物品费用为c[i]=j,价值为w[i]=v[i][j]code:
#include #include #include int max(int a,int b){ if(a>b) return a; else return b;}int f[120],v[120][120];int main(){ int n,m; while(1) { scanf("%d%d",&n,&m); if(n==0&&m==0)break; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&v[i][j]); } } memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) //枚举各组 { for(int j=m;j>=0;j--) //类似01背包 { for(int k=1;k<=m;k++) //枚举组内各物品 { if(j>=k) //k也为费用 { f[j]=max(f[j],f[j-k]+v[i][k]); } } } } printf("%d\n",f[m]); }}/*input:2 21 21 32 22 12 12 33 2 13 2 10 0output:346*/