1.打包
/*一个二维01背包 样例输入: 6 5 4 10 2 2 20 3 2 40 4 3 30 3 3 样例输出: 50 */ #include<iostream> using namespace std; #include<cstdio> #define N 381 int f[N][N]; int n,V,G; struct Wp{ int t,v,g; }; Wp wp[N]; void input() { scanf("%d%d%d",&V,&G,&n); for(int i=1;i<=n;++i) scanf("%d%d%d",&wp[i].t,&wp[i].v,&wp[i].g); } void dp() { for(int i=1;i<=n;++i) for(int j=V;j>=wp[i].v;--j) for(int k=G;k>=wp[i].g;--k) f[j][k]=max(f[j][k],f[j-wp[i].v][k-wp[i].g]+wp[i].t); cout<<f[V][G]<<endl; } int main() { input(); dp(); return 0; }