金明的预算方案
主件 |
附件 |
电脑 |
打印机,扫描仪 |
书柜 |
图书 |
书桌 |
台灯,文具 |
工作椅 |
无 |
1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0
2200
#include<cstdio> int main() { int n,m,f[32100]={0},v[65][3]={0},p[65][3]={0};//v[i][0]为第i件主件的价值,1为附件1,2为附件2 scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); if(z==0){//主件 v[i][0]=x; p[i][0]=y; } else//附件 for(int k=1;k<3;k++) if(v[z][k]==0&&p[z][k]==0){ v[z][k]=x; p[z][k]=y; break; } } for(int i=1;i<=m;i++) if(v[i][0]!=-0) for(int j=n;j>=0;j--){ if(j>=v[i][0]+v[i][1]+v[i][2]&&f[j-(v[i][0]+v[i][1]+v[i][2])]+p[i][0]*v[i][0]+p[i][1]*v[i][1]+p[i][2]*v[i][2]>f[j]) f[j]=f[j-(v[i][0]+v[i][1]+v[i][2])]+p[i][0]*v[i][0]+p[i][1]*v[i][1]+p[i][2]*v[i][2]; if(j>=v[i][0]+v[i][1]&&f[j-(v[i][0]+v[i][1])]+v[i][0]*p[i][0]+v[i][1]*p[i][1]>f[j]) f[j]=f[j-(v[i][0]+v[i][1])]+v[i][0]*p[i][0]+v[i][1]*p[i][1]; if(j>=v[i][0]+v[i][2]&&f[j-(v[i][0]+v[i][2])]+v[i][0]*p[i][0]+v[i][2]*p[i][2]>f[j]) f[j]=f[j-(v[i][0]+v[i][2])]+v[i][0]*p[i][0]+v[i][2]*p[i][2]; if(j>=v[i][0]&&f[j-v[i][0]]+v[i][0]*p[i][0]>f[j]) f[j]=f[j-v[i][0]]+v[i][0]*p[i][0]; } printf("%d\n",f[n]); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
SDNU 1179.金明的预算方案【NOIP 2006 提高组】【背包问题】【7月30】
原文地址:http://blog.csdn.net/a995549572/article/details/47156147