问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

背包问题c语言疑问

发布网友 发布时间:2023-03-11 11:13

我来回答

2个回答

热心网友 时间:2023-10-14 23:06

#include <stdio.h>
#define N 100 //物品总种数不是常量,没法根据它来决定数组的长度,只有先定义个长度了
int n;//物品总种数
double limitW;//*的总重量
double totV;//全部物品的总价值
double maxv;//解的总价值
double maxw=0.0;//解的总重量-------------->新加
int option[N];//解的选择
int cop[N];//当前解的选择
struct {//物品结构
double weight;
double value;
}a[N];
//参数为物品i,当前选择已经达到的重量和tw,本方案可能达到的总价值
void find(int i,double tw,double tv)
{
int k;
//物品i包含在当前方案的可能性
if(tw+a[i].weight <= limitW){
cop[i]=1;
if(i<n-1)find(i+1,tw+a[i].weight,tv);
else{
for(k=0;k<n;++k)
option[k]=cop[k];
maxv=tv;
}
}
cop[i]=0;
//物品i不包含在当前方案的可能性
if(tv-a[i].value>maxv){
if(i<n-1)find(i+1,tw,tv-a[i].value);
else{
for(k=0;k<n;++k)
option[k]=cop[k];
maxv=tv-a[i].value;
}
}
}
void main()
{
int k;
double w,v;
printf("输入物品种数:");
scanf("%d",&n);
printf("输入各物品的重量和价值:");
for(totV=0.0,k=0;k<n;++k){
scanf("%lf %lf",&w,&v);
a[k].weight = w;a[k].value = v;
totV += v;
}
printf("输入*重量:");
scanf("%lf",&limitW);
maxv=0.0;
for(k=0;k<n;++k)cop[k]=0;
find(0,0.0,totV);
for(k=0;k<n;++k)
if(option[k])
{//-------------->新加
maxw+=a[k].weight//-------------->新加
printf("%4d",k+1);
}//-------------->新加
printf("总价值为: %2f",maxv);
printf("总重量为: %2f",maxw); //-------------->新加
}

热心网友 时间:2023-10-14 23:07

#include
<stdio.h>
#define
N
100
//物品总种数不是常量,没法根据它来决定数组的长度,只有先定义个长度了
int
n;//物品总种数
double
limitW;//*的总重量
double
totV;//全部物品的总价值
double
maxv;//解的总价值
double
maxw=0.0;//解的总重量-------------->新加
int
option[N];//解的选择
int
cop[N];//当前解的选择
struct
{//物品结构
double
weight;
double
value;
}a[N];
//参数为物品i,当前选择已经达到的重量和tw,本方案可能达到的总价值
void
find(int
i,double
tw,double
tv)
{
int
k;
//物品i包含在当前方案的可能性
if(tw+a[i].weight
<=
limitW){
cop[i]=1;
if(i<n-1)find(i+1,tw+a[i].weight,tv);
else{
for(k=0;k<n;++k)
option[k]=cop[k];
maxv=tv;
}
}
cop[i]=0;
//物品i不包含在当前方案的可能性
if(tv-a[i].value>maxv){
if(i<n-1)find(i+1,tw,tv-a[i].value);
else{
for(k=0;k<n;++k)
option[k]=cop[k];
maxv=tv-a[i].value;
}
}
}
void
main()
{
int
k;
double
w,v;
printf("输入物品种数:");
scanf("%d",&n);
printf("输入各物品的重量和价值:");
for(totV=0.0,k=0;k<n;++k){
scanf("%lf
%lf",&w,&v);
a[k].weight
=
w;a[k].value
=
v;
totV
+=
v;
}
printf("输入*重量:");
scanf("%lf",&limitW);
maxv=0.0;
for(k=0;k<n;++k)cop[k]=0;
find(0,0.0,totV);
for(k=0;k<n;++k)
if(option[k])
{//-------------->新加
maxw+=a[k].weight//-------------->新加
printf("%4d",k+1);
}//-------------->新加
printf("总价值为:
%2f",maxv);
printf("总重量为:
%2f",maxw);
//-------------->新加
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王卡专属免流包是什么意思 腾讯王卡专属流量是什么意思 人防临空墙排烟机房可以留洞吗? 瑞士转机的问题? 雅阁、第九代凯美瑞、迈腾,大空间的中级车推荐 云顶之弈双人排位介绍 金铲铲之战 金铲铲段位相差多少可以一起打? 现在上海办理居住证需要本人去吗 34周加5天是几个月 孕34周是几个月了 孕34周如何预防早产 乐视Maxw通用版新机,怎么无法用数据流量上网 如何翻译“寻常不通书问,怠慢之罪,犹可阔略。”“无乃闻其声不考其情,取其华而遗其实乎?”“轼每怪时人... 不寻常是什么意思? 苏铁有哪些价值作用,极具观赏价值和食用价值 苏铁的功效与作用,树形优美观赏性强/药用可治疗高血压 &#xFEFF;苏铁的功效与作用 北京黄牌车受哪些限制 福州电动车上了黄牌需要注意什么吗 在北京开黄牌面包车的注意事项 有古墓的地方如果风水好可以葬坟吗 如果灵山葬坟怎么样 葬坟是否大面积占耕地面积 与深明大义同类的词语 与深明大义的同义词写3个 水浒传中的人物有那些? 告诉我水浒传中人物的外号和星 求秋的诗 阳了可以看阿凡达是什么梗 为什么我下载的阿凡达 1080p 的电影有模糊? 《阿凡达:水之道》为什么这样火? 海南茶叶特产有那些 梦中又梦中是什么歌 昨天做了一个梦, 但是梦里又有梦,梦里还有梦,然后梦里还有梦,这是什么梦啊? 一次性杯子摞几个? 我们家有几个水杯 奇塑一次性杯一件有多少个 你们家里有几个杯子? 过分执着暗示心理疾病 健脾养胃颗粒(中药)详细资料大全 健脾颗粒有什么作用 在俄罗斯的中国留学生“快闪”祝福祖国,祝福语十分感人! 菟丝子枸杞煎蛋——清肝明目补充气血 带脉针刺深度及方向 针灸带脉进针多少 腹部赘肉多的原因,艾灸带脉,立现小蛮腰! 折耳根为什么会变黑 折耳根怎样不会变黑 全自动洗衣机两个瓶子的图案是什么意思 耳机的折旧费怎么算 柘榴吃多了对身体有害吗? 金立手机录音录了播放不了是为什么? 我妈买了一些干枣 里面还有花生 泡茶喝有什么好处?