您的位置:首页 > 其它

nyoj106 背包问题

2015-08-11 11:43 232 查看
#include <stdio.h>
struct Beibao
{
int v;//题意中v为每个物品的单位重量的价值
int w;//每个物体的总重量
};
int main()
{
int k;
Beibao a[11],t;
scanf("%d",&k);
while(k--)
{
int s,m;
scanf("%d%d",&s,&m);//s为物品件数 m为总限重
int i,j;
for(i=0;i<s;i++)
scanf("%d%d",&a[i].v,&a[i].w);
for(i=0;i<s-1;i++)
for(j=i+1;j<s;j++)
{
if(a[i].v<a[j].v)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int x=0,y=0;
for(i=0;i<s;i++)
{
if((x+a[i].w)<m)
{
x=x+a[i].w;
y=y+a[i].w*a[i].v;
}
else
{
y=y+(m-x)*a[i].v;//重量加起来不超过限重的就直接计算价值 超过或等于了就分隔算一下在原来价值的基础上又能增加多少 求总和即可
break;
}
}
printf("%d\n",y);
}
return 0;
}
这个一定要看清题意 是单位价值 且这是可分割的背包问题 用贪心算法即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: