c语言背包问题背包问题的C语言描述

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

编程实现0-1背包问题的求解

可惜我是学PASCAL的pascal的代码是:

var m,n,j,i:integer; c,w:array[1..200] of integer; f:array[0..200,0..30] of integer; function q(x,y:integer):integer; begin if x>y then q:=x else q:=y; end; begin readln(m,n); for i:= 1 to n do readln(w[i],c[i]); for i:=1 to m do f[0,i]:=0; for i:=1 to n do f[i,0]:=0; for i:=1 to n do for j:=1 to m do begin if j>=w[i] then f[i,j]:=q(f[i-1,j-w[i]]+c[i],f[i-1,j]) else f[i,j]:=f[i-1,j]; end; writeln(f[n,m]); end.

不会C++

你加油吧

思路是:设f(i,x)表示前i件物品,总重量不超过x的最优价值,则f(i,x)=max(f(i-1,x-w[i])+c[i],f(i-1,x)){第i件物品放进去与不放进去的更优方案},f(n,m)即为最优解。

C语言,算法,动态规划。对于0-1背包问题,我有个小疑问。

dp(i,j)表示前i件物品选择任意件后放进最大容量为j的背包的最大价值。

显然,dp(0,j)=0,dp(i,0)=0。

对于第i件物品,有两种情况: 一、不放进背包,则最大价值为前i-1件物品可以放进容量为j的背包的最大价值,即dp(i,j)=dp(i-1,j) 二、放进背包,则最大价值为第i件物品价值加上前i-1件物品卡伊放进容量为j-w[i]的背包的最大价值,即dp(i,j)=v[i]+dp(i-1,j-w[i) 综合两种情况 dp(i,j)=max{dp(i-1,j), v[i]+dp(i-1,j-w[i)}

背包问题的C语言描述

#include <stdio.h> #define N 7//物品数量 #define S 15//要求背包重量 int W[N+1]={0,1,4,3,4,5,2,7};//各物品重量,W[0]不使用。





int knap(int s,int n)//s为剩余重量,n为剩余可先物品数。



{ if(s==0)return 1;//return 1 means ess.. if(s<0||(s>0&&n<1))return 0; if(knap(s-W[n],n-1)) { printf("%4d",W[n]); return 1; } return knap(s,n-1); } void main() { if(knap(S,N))printf(" OK! "); else printf("Failed!"); } #include <stdio.h> #define N 7 #define S 15 typedef struct { int S; int n: int job; } KNAPTP; int w[N+1] = {0,1,4,3,4,5,2,7}; int knap(int S,int n); main(){ if ( knap(S,N) ) printf("0K! " ); else printf( "N0! " ); int knap( int S,int n ) { KNAPTP stack[100],x; , k, rep; x.s = s; x.n = n; x.job = 0; = l; ] = x; k = 0; while (>0&&!k ) { x = ]; rep = l; while ( !k && rep ) { if( x.s=0 ) k = 1; /*已求得一组解*/ else if ( x.S<0 || x.n<=0 ) rep = 0; else { x.s = x.s-w[x.n--] ; x.job=1; stack[+] = x; } } if ( !k ) { rep = 1; while ( >= 1 && rep) { x = --]; if ( x.job=1){ x.s += w[x.n + 1]; x.job = 2; stack[+] = x; rep=0 ; } } } } if (k){ */输出一组解*/ while ( >= 1 ) { x = StaCk [-- ]; if ( x.job == 1 ) printf ( "M ,w[x.n+1] ); } } return k; }

麻花云:3折优惠,香港CN2安徽麻花云香港安徽移动BGP云服务器(大带宽)

麻花云在7月特意为主机测评用户群定制了促销活动:香港宽频CN2云服务器、安徽移动云服务器(BGP网络,非单线,效果更好)、安徽移动独立服务器、安徽电信独立服务器,全部不限制流量,自带一个IPv4,默认5Gbps的DDoS防御。活动链接:https://www.mhyun.net/act/zjcp特价云服务器不限流量,自带一个IPv4,5Gbps防御香港宽频CN2全固态Ⅲ型 4核4G【KVM】内存:...

TMTHosting:夏季优惠,美国西雅图VPS月付7折,年付65折,美国服务器95折AS4837线路

tmthosting怎么样?tmthosting家本站也分享过多次,之前也是不温不火的商家,加上商家的价格略贵,之到斯巴达商家出现,这个商家才被中国用户熟知,原因就是斯巴达家的机器是三网回程AS4837线路,而且也没有多余的加价,斯巴达家断货后,有朋友发现TMTHosting竟然也在同一机房,所以大家就都入手了TMTHosting家的机器。目前,TMTHosting商家放出了夏季优惠,针对VPS推...

青果网络-618阿里云,腾讯云特惠优惠折上折!

官方网站:点击访问青果云官方网站活动方案:—————————–活动规则—————————1、选购活动产品并下单(先不要支付)2、联系我司在线客服修改价格或领取赠送时间3、确认价格已按活动政策修改正确后,支付订单,到此产品开设成功4、本活动产品可以升级,升级所需费用按产品原价计算若发生退款,按资源实际使用情况折算为产品原价再退还剩余余额! 美国洛杉矶CN2_GIACPU内存系统盘流量宽带i...

c语言背包问题为你推荐
g2gB2E和G2E分别是什么意思rdlcordless phone是什么意思oracle索引如何在ORACLE数据库的字段上建立索引备忘录模式Java中常用的设计模式有哪些?请详细说明一下工厂模式。保留两位有效数字物理中保留两位有效数字是保留小数点后的两位还是从小数点前不是0的数开始保留两位?丁奇海贼王里“D”的意思是什么?ruby语言Ruby是一种什么样的语言,主要用来做什么,现在有一家公司让我从java转ruby,我很犹豫?弹幕网站A站B站网址是什么,国内很出名嗎?有什么网站特点..清除电脑垃圾怎样清除电脑垃圾清除电脑垃圾怎么清除电脑的垃圾啊?
php主机空间 樊云 256m内存 嘉洲服务器 52测评网 jsp空间 双11秒杀 河南移动m值兑换 重庆双线服务器托管 双12 东莞idc 国内域名 中国linux 服务器防火墙 中国联通宽带测速 hostease 重庆联通服务器托管 googlevoice 腾讯云平台 zencart安装 更多