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

求动态规划01背包问题c语言的代码,要稍微简单且无错的。谢谢

发布网友 发布时间:2022-04-07 10:34

我来回答

4个回答

热心网友 时间:2022-04-07 12:03

int c[10][100];/*对应每种情况的最大价值*/

int knapsack(int m,int n){ // 一个载重为m的背包 总共n个物品
int i,j,w[10],p[10];
printf("each weight & value :\n");
for(i=1;i<=n;i++)
scanf("%d %d",&w[i],&p[i]); // 第i个 物品的重量w[i] 价值p[i]
for(i=0;i<10;i++)
for(j=0;j<100;j++)
c[i][j]=0;/*初始化数组*/
for(i=1;i<=n;i++) //遍历每一个物品i
for(j=1;j<=m;j++) //假设背包的载重j为1、2、3、4、5、... ... m的情况
{
if(j >= w[i]) /*如果当前物品的重量 < 背包载重*/
{
if(p[i]+c[i-1][j-w[i]]>c[i-1][j])/*如果本物品的价值加上 背包剩下的空间能放的物品的价值 大于上一次选择的最佳方案则更新c[i][j]*/
c[i][j]=p[i]+c[i-1][j-w[i]];
else
c[i][j]=c[i-1][j];
// c[i][j] = (p[i]+c[i-1][j-w[i]]>c[i-1][j])?(p[i]+c[i-1][j-w[i]]):(c[i-1][j]);
}
else c[i][j]=c[i-1][j];
}
return c[n][m];

}

int main()
{
int m,n;
printf("背包的承重量,物品的总个数:\n");
while(scanf("%d %d",&m,&n) != EOF){
printf("能装的最大总价值为%d",knapsack(m,n));
printf("\n");
}
return 0;
}

热心网友 时间:2022-04-07 13:21

我写个C++的。

#include<iostream>
#define MAX 1111
using namespace std;
int f[MAX],n,m,v,w;
int main(){
cin>>n>>m;//n表示个数,m表示背包容量
for(int i=1;i<=n;++i){
cin>>v>>w;//v=价值,w=重量
for(int j=m;j>=w;--j)
if(f[j]<f[j-w]+v)
f[j]=f[j-w]+v;
}
cout<<f[m]<<'\n';
return 0;
}

C++和C应该都差不多吧。。这个最简洁了 。顺便一句,如果要能无限放的话
for(int j=m;j>=w;--j)这一句变成for(int j=w;j<=m;++j)就行了。追问没有iostream怎么办

追答#include
#define MAX 1111
int f[MAX],n,m,v,w;
int main(){
int i,j;
scanf("%d%d",&n,&m);//n表示个数,m表示背包容量
for(i=1;i=w;--j)
if(f[j]<f[j-w]+v)
f[j]=f[j-w]+v;
}
printf("%d\n",f[m]);
return 0;
}

这个是C的

热心网友 时间:2022-04-07 14:56

#include<stdio.h>
int c[10][100];/*对应每种情况的最大价值*/
int knapsack(int m,int n)
{
int i,j,w[10],p[10];
printf("请输入每个物品的重量,价值:\n");
for(i=1;i<=n;i++)
scanf("%d,%d",&w[i],&p[i]);
for(i=0;i<10;i++)
for(j=0;j<100;j++)
c[i][j]=0;/*初始化数组*/
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(w[i]<=j) /*如果当前物品的容量小于背包容量*/
{
if(p[i]+c[i-1][j-w[i]]>c[i-1][j])

/*如果本物品的价值加上背包剩下的空间能放的物品的价值*/

/*大于上一次选择的最佳方案则更新c[i][j]*/
c[i][j]=p[i]+c[i-1][j-w[i]];
else
c[i][j]=c[i-1][j];
}
else c[i][j]=c[i-1][j];
}
return(c[n][m]);

}
int main()
{
int m,n;int i,j;
printf("请输入背包的承重量,物品的总个数:\n");
scanf("%d,%d",&m,&n);
printf("旅行者背包能装的最大总价值为%d",knapsack(m,n));
printf("\n");
return 0;
}

热心网友 时间:2022-04-07 16:47

楼上你那个不是贪婪算法么?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
心理咨询师培训怎么收费标准是多少 2024心理咨询师培训费用是多少钱 心理咨询师培训费用大概是多少 心理咨询师培训课程收费标准 新蒙迪欧空调怎么用? 福特蒙迪欧16款2.0T冷车启动怠速会一抖一抖的是什么情况 牛油果冻了还能吃不 牛油果冻过了能吃吗 泰兴人很有钱吗? 江苏有多少百万人口以上的城市 贷款担保人有什么风险? 车贷担保人有什么风险 请问买车贷款做担保,担保人有何风险? 作业帮一课只有学习课程时才会收费吗? 哪里买硅胶娃娃好? 硅胶充气娃娃去哪买质量好? 什么样的实体硅胶娃娃质量好?哪里才有呢? 推荐个好点的硅胶娃娃品牌吧? 哪个是好的实体娃娃品牌啊? 蒙面舞王宝藏歌姬第二个 跳舞的歌曲? 《蒙面舞王》第二季六位分别是谁? 网易定向流量包能导航使用吗 决战平安京辉夜姬典藏什么时候结束 学习网络工程师要学习那些课程? 110-蒙托克程序是什么 私房红枣糕怎么做 绵月丰姬的与地上人关系 网络工程师必修的课程有哪些? 01背包问题-动态规划 整理成C语言!谢谢! 胸围75C到底是多大 开淘宝的,在纠结是超级店长好还是火牛促销推广好?2个有什么区别?用过的来,推荐一下 饿了吗有超级店长放差评美团用什么? 大家都用什么线缠戒指 想把戒指戴脖子上,用什么绳配好看?多粗适合?请详细点,谢谢。戒指是比较简单的那种 戒指戴脖子上用什么绳子或链子 钻石戒指不想戴了用什么颜色的绳子编个项链好看? 戒指大如何用绳子绑的好看 奥德赛是哪国家的神话 奥德赛是指什么? 《伊利亚特》和《奥德赛》是古代哪个国家的著名史诗 梦见家里长了一根竹笋,别人把它挖了 梦见自家的竹林长了竹笋 梦见老屋厨房长竹笋 梦见房子旁边长竹子 竹笋。竹子不是很多,但竹笋很多,是那种大毛竹,长得... 梦见老家房子的地下长了很多竹笋,又大多,女儿一碰到,就被吃了 梦见自里家里放着一屋的新鲜毛竹笋 梦见一根笋子长在房子面前 梦见已故的母亲和自己的屋长了竹笋 梦见自己家旁边有坟墓长竹笋好吗? 梦见竹笋长得很高大,而且顶端没了