一道C语言题目:网上找到的大多数都是有错误的,哪个高手能整个没错的给我?

假设有n件物品,这些物品的重量分别是W1,W2,…,Wn,物品的价值分别是V1,V2,…,Vn。求从这n件物品中选取一部分物品的方案,使得所选中的物品的总重量不超过限定的... 假设有n件物品,这些物品的重量分别是W1 , W2 , … , Wn,物品的价值分别是V1,V2, …,Vn。求从这n件物品中选取一部分物品的方案,使得所选中的物品的总重量不超过限定的重量W(W<∑Wi, i=1,2,┅,n),但所选中的物品价值之和为最大。 展开
 我来答
百度网友28b4182
2012-05-11 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1978万
展开全部
#include<stdio.h>
int w[1000],v[1000];
int dp[100000]={0};
int main()
{
int n,m;
int i,j;
puts("输入物品个数N和限定重量W:");
scanf("%d%d",&n,&m);
puts("输入N个物品的重量");
for(i=0;i<n;i++)scanf("%d",&w[i]);
puts("输入N个物品的价值");
for(i=0;i<n;i++)scanf("%d",&v[i]);
for(i=0;i<n;i++)
{
for(j=m;j>=w[i];j--)
{
if(dp[j-w[i]]+v[i]>dp[j])
dp[j]=dp[j-w[i]]+v[i];
}
}
printf("%d\n",dp[m]);
return 0;
}
影子二号
2012-05-11 · 超过28用户采纳过TA的回答
知道答主
回答量:113
采纳率:0%
帮助的人:81.7万
展开全部
这个是一个0-1动态规划的问题,给你个网址,你去看看http://wenku.baidu.com/view/7ce09508f12d2af90242e621.html
然后你就可以看懂
for(i=0;i<n;i++)
{
for(j=m;j>=w[i];j--)
{
if(dp[j-w[i]]+v[i]>dp[j])
dp[j]=dp[j-w[i]]+v[i];
}
}

这个是怎么回事了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞手心的爱情海
2012-05-11 · TA获得超过232个赞
知道答主
回答量:126
采纳率:0%
帮助的人:184万
展开全部
给分我就给你写,重量和价值是给定的还是需要输入的
追问
好,分数没问题!重量和价值都是要输入的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式