您的位置:首页 > 其它

Wiki OI 1014 装箱问题

2013-05-26 22:31 211 查看
题目链接:http://wikioi.com/problem/1014/

算法与思路:01背包

转移方程为dp[i][j]=max{dp[i-1][j],dp[i-1][j-cost[i]]+w[i]}

表示考虑第i件物品,容量为j时,有两种策略,第一种是不选该物品,第二种为选择该物品,在这两种策略中选择一个最优策略

#include<stdio.h>
#include<string.h>
int v, n;
int dp[20005];
int Max(int x,int y)
{
return x > y ? x : y;
}
void zeroonepack(int cost, int value)
{
int i;
for(i = v; i >= cost; i--)
dp[i] = Max(dp[i], dp[i - cost] + value);
}
int main()
{
int i;
int a[33];
scanf("%d %d",&v, &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
memset(dp, 0, sizeof(dp));
for(i = 0; i < n; i++)
zeroonepack(a[i], a[i]);
printf("%d\n",v - dp[v]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: