HDU 1712 ACboy needs your help(分组背包)
2016-11-08 21:37
435 查看
题目:点击打开链接
题意:给你一个n行m列的矩阵a,a[i][j]:完成第i科目的复习花费j天能够获得的效益,求花费总天数m天能得到的最大效益。
解法:因为对于a[i],只能选一种复习天数j来复习这一科,所以是0或1分组。三层循环 k 组数,j 从最大m天(即背包总容量V)到0,i 第k组所有情况这个题中也就是每一组的天数 都是1到m。
状态转移方程:f[j]=max(f[j],f[j-i]+data[k][i])。
代码:
题意:给你一个n行m列的矩阵a,a[i][j]:完成第i科目的复习花费j天能够获得的效益,求花费总天数m天能得到的最大效益。
解法:因为对于a[i],只能选一种复习天数j来复习这一科,所以是0或1分组。三层循环 k 组数,j 从最大m天(即背包总容量V)到0,i 第k组所有情况这个题中也就是每一组的天数 都是1到m。
状态转移方程:f[j]=max(f[j],f[j-i]+data[k][i])。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include <iostream> #include <cstring> using namespace std; int main() { int m,n,t,data[102][102],f[102]; while(cin>>n>>m) { if(n==0&&m==0) break; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>data[i][j]; memset(f,0,sizeof(f)); for(int k=1;k<=n;k++) for(int j=m;j>=0;j--) for(int i=1;i<=m;i++) if(j-i>=0) f[j]=max(f[j],f[j-i]+data[k][i]); cout<<f[m]<<endl; } return 0; }
相关文章推荐
- hdu1712 ACboy needs your help 我的ACM我的梦,回顾篇 分组背包
- hdu 1712 ACboy needs your help (分组背包)
- hdu 1712 ACboy needs your help (分组背包)
- HDU 1712 ACboy needs your help(DP 分组背包)
- HDU 1712 ACboy needs your help 分组背包
- hdu 1712 ACboy needs your help(分组背包入门)
- hdu 1712 ACboy needs your help 分组背包
- HDU 1712 ACboy needs your help(分组背包)
- HDU 1712 ACboy needs your help(分组背包)
- hdu 1712 ACboy needs your help(分组背包)
- hdu 1712 ACboy needs your help(分组背包)
- hdu 1712 ACboy needs your help (分组背包)
- HDU 1712 ACboy needs your help (分组背包)
- hdu 1712 ACboy needs your help (分组背包)
- hdu 1712 ACboy needs your help (分组背包)
- hdu 1712 ACboy needs your help(分组背包入门题)
- hdu 1712 ACboy needs your help(分组背包)
- hdu 1712 ACboy needs your help(分组背包)
- hdu 1712 ACboy needs your help(分组背包)
- hdu 1712 ACboy needs your help 分组背包