c语言背包问题用C语言实现背包问题求解。

c语言背包问题  时间:2021-07-03  阅读:()

一道背包问题的c语言题目 老是wa 怎么回事啊

楼上看来没做过poj题吧,wa不是说程序错了,而是提交时答案不对。

这个是-01背包问题,你可以参考一下网上的状态转移方程。

很容易搜到,再对比你的程序,就明白了。

完全背包问题,用C语言编译的代码~是所有代码,不是一段关键代码。

参考代码: /* * n:物品种类 每种只能选取一种 * capacity:背包容量 * c[i]:第i种物品的花费 cost * v[i]:第i种物品的价值 value * f[j]:i状态下容量为j时背包可获得的最大价值 */ int getMaxValue(int n,int capacity){ for(int i=0;i=0;j--) if(i==0){ if(j>=c[i])f[j]=v[i]; else f[j]=0; } else if(j>=c[i])f[j]=max(f[j],f[j-c[i]]+v[i]); return f[capacity]; }

c语言背包问题,求高手解答

对01背包求解,方法有回溯法、分支限界法、动态规划法等。

给你一个较容易理解的解法:穷举搜索。

问题求解的结果实际上是一个01序列,0表示该物品未装入背包,1表示装入背包。

以本题为例,设求解结果为0111011,表示第0个和第4个未装入,其他均装入。

关键就是如何找到这个01序列。

设物品数量为n,则解空间为2^n,所以穷举搜索的时间效率为O(2^n)。

#include <stdio.h> #define N 7 int weight[N]={35, 30, 6, 50, 40 10, 25}, cost[N]={10, 40, 30, 50, 35, 40, 30}; char name[] = "ABCDEFG"; int max = 0, Max[N]; /*max用于存放最大价值,Max用于存放最优解向量*/ int v[N]; /*v:求解时用于存放求解过程向量*/ template <class T> void Swap(T &a, T &b) { T tmp = a; a = b, b = tmp; } void Knapsack(int step, int bag, int value1, int value2, int n) /*step表示第step步的选择(即第step个物品的选择),bag为背包剩余容量,value1表示包中现有物品总价值,value2表示剩余物品总价值,n为物品总数量*/ { int i; if((step >= n) || (weight[step] > bag) || (value1 + value2 <= max)) /*如果所有物品都选择完毕或剩余的物品都放不进或者包中物品总价值与剩余物品总价值之和小于等于目前的已知解,则找到一个解(但不一定是最终解或更优解)*/ { for(i = step; i < n; i++) v[i] = 0; /*剩余的物品都不放入*/ if(value1 > max) /*如果本次求得的解比以往的解更优,则将本次解作为更优解*/ { max = value1; for(i = 0; i < n; i++) Max[i] = v[i]; /*将更优解保存到Max向量中*/ } return; } v[step] = 0, Knapsack(step + 1, bag, value1, value2 - cost[step], n); /*不将第step个物品放入背包,第step个物品的价值被放弃,进行下一步的选择*/ v[step] = 1, Knapsack(step + 1, bag - weight[step], value1 + cost[step], value2 - cost[step], n); /*将第step个物品放入背包,进行下一步的选择*/ } void main( ) { /*输入数据:背包容量、物品数量、重量、价值 代码略*/ int bag = 150, i, j, min, totalcost; /*按物品重量从小到大的顺序对物品排序,排序时cost向量中的相对顺序也要作相应移动*/ for(i = 0; i < N - 1; i++) { for(min = i, j = i + 1; j < N; j++) if(weight[j] < weight[min]) min = j; if(i != min) { Swap(weight[i], weight[min]); Swap(cost[i], cost[min]); Swap(name[i], name[min]); } } for(totalcost = 0, i = 0; i < N; i++) totalcost += cost[i]; /*求总价值*/ Knapsack(0, bag, 0, totalcost, N); /*bag为空背包容量, totalcost为物品总价值, N为物品数量*/ /*以下输出解*/ printf("最大价值为: %d。

装入背包的物品依次为: ", max); for(i = 0; i < N; i++) if(Max[i]) printf("%c ", name[i]); printf(" "); } 我的回答你满意吗?如果满意,就请采纳哦,或者你也可以继续追问。

用C语言实现背包问题求解。

#include<stdio.h> #define OK 1 #define ERROR 0 #define SElemtype int #define STACKSIZE 100

typedef struct{ SElemtype data[STACKSIZE]; ; } SqStack;

SElemtype Initstack(SqStack &s)//初始化栈。

{ =0; return OK; }

SElemtype Push(SqStack &s,SElemtype e)//入栈。

{ s.data[++]=e; return OK; }

void main() { int i,n,totalvol,w[STACKSIZE],sum=0,j=0; SqStack s; Initstack(s); printf("请输入背包能装入的总体积:"); scanf("%d",&totalvol); printf("请输入物品件数:"); scanf("%d",&n); printf("请输入每件物品的体积:"); for(i=0;i<n;i++) scanf("%d",&w[i]); while(!=-1) {

if(sum+w[j]<=totalvol) { Push(s,j); sum+=w[j]; }

if(sum==totalvol) //找到一组,退栈顶,找下一组。

{ for(i=0;i<;i++) printf("%d ",w[s.data[i]]); printf(" ");

--; sum-=w[s.data[]]; j=s.data[]+1; }

else j++;

while(j==n) //遍历后仍未找到,则退栈。

{ --; sum-=w[s.data[]]; j=s.data[]+1; } }

}

香港站群多ip服务器多少钱?零途云香港站群云服务器怎么样?

香港站群多ip服务器多少钱?想做好站群的SEO优化,最好给每个网站都分配一个独立IP,这样每个网站之间才不会受到影响。对做站群的站长来说,租用一家性价比高且提供多IP的香港多ip站群服务器很有必要。零途云推出的香港多ip站群云服务器多达256个IP,可以满足站群的优化需求,而且性价比非常高。那么,香港多ip站群云服务器价格多少钱一个月?选择什么样的香港多IP站群云服务器比较好呢?今天,小编带大家一...

cera:秋季美国便宜VPS促销,低至24/月起,多款VPS配置,自带免费Windows

介绍:819云怎么样?819云创办于2019,由一家从2017年开始从业的idc行业商家创办,主要从事云服务器,和物理机器819云—-带来了9月最新的秋季便宜vps促销活动,一共4款便宜vps,从2~32G内存,支持Windows系统,…高速建站的美国vps位于洛杉矶cera机房,服务器接入1Gbps带宽,采用魔方管理系统,适合新手玩耍!官方网站:https://www.8...

hypervmart:英国/荷兰vps,2核/3GB内存/25GB NVMe空间/不限流量/1Gbps端口/Hyper-V,$10.97/季

hypervmart怎么样?hypervmart是一家国外主机商,成立于2011年,提供虚拟主机、VPS等,vps基于Hyper-V 2012 R2,宣称不超售,支持linux和windows,有荷兰和英国2个数据中心,特色是1Gbps带宽、不限流量。现在配置提高,价格不变,性价比提高了很多。(数据中心不太清楚,按以前的记录,应该是欧洲),支持Paypal付款。点击进入:hypervmart官方网...

c语言背包问题为你推荐
weakhashmapWeakHashMap和HashMap的区别云图片云相册是什么意思rdlcordless phone是什么意思webcrack我用WebCrack4 在破解路由器密码的时候为什么在破解密码的中途自动关闭掉李昊天铠甲勇士2刑天的李昊天秘密是什么deviceid如何查看自己安卓手机的Android Device ID调度系统生产调度系统flowplayer如何编译flowplayer源码radius认证PPPoE有认证的功能,RADIUS也有验证功能,两者有区别么??民生电商陆金所、民生电商哪个更适合投资?
国外免费vps 免费com域名申请 域名解析文件 中国域名交易中心 java主机 博客主机 私服服务器 网络星期一 抢票工具 线路工具 cpanel空间 北京双线机房 免费吧 电信虚拟主机 华为云服务登录 无限流量 免费邮件服务器 dnspod 上海电信测速 数据库空间 更多