金明的预算方案
|
主件 |
附件 |
|
电脑 |
打印机,扫描仪 |
|
书柜 |
图书 |
|
书桌 |
台灯,文具 |
|
工作椅 |
无 |
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