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; }

简单测评v5.net的美国cn2云服务器:电信双程cn2+联通AS9929+移动直连

v5.net一直做独立服务器这块儿的,自从推出云服务器(VPS)以来站长一直还没有关注过,在网友的提醒下弄了个6G内存、2核、100G SSD的美国云服务器来写测评,主机测评给大家趟雷,让你知道v5.net的美国云服务器效果怎么样。本次测评数据仅供参考,有兴趣的还是亲自测试吧! 官方网站:https://v5.net/cloud.html 从显示来看CPU是e5-2660(2.2GHz主频),...

SunthyCloud阿里云国际版分销商注册教程,即可PayPal信用卡分销商服务器

阿里云国际版注册认证教程-免绑卡-免实名买服务器安全、便宜、可靠、良心,支持人民币充值,提供代理折扣简介SunthyCloud成立于2015年,是阿里云国际版正规战略级渠道商,也是阿里云国际版最大的分销商,专业为全球企业客户提供阿里云国际版开户注册、认证、充值等服务,通过SunthyCloud开通阿里云国际版只需要一个邮箱,不需要PayPal信用卡就可以帮你开通、充值、新购、续费阿里云国际版,服务...

819云(240元)香港CN2 日本CN2 物理机 E5 16G 1T 20M 3IP

819云是我们的老熟人了,服务器一直都是稳定为主,老板人也很好,这次给大家带来了新活动,十分给力 香港CN2 日本CN2 物理机 E5 16G 1T 20M 3IP 240元0官方网站:https://www.819yun.com/ 特惠专员Q:442379204套餐介绍套餐CPU内存硬盘带宽IP价格香港CN2 (特价)E5 随机分配16G1T 机械20M3IP240元/月日本CN2 (...

c语言背包问题为你推荐
洗牌算法我是小白,eclipse说老式声明,怎么办?帮我看下,不胜感激!! //发牌算法fcloseC语言文件关闭函数fclose(文件指针)是什么?md5值哈希值 散列值 MD5值 都是什么意思啊oracle索引什么是Oracle的函数索引?deviceidAndroid里DeviceId和AndroidId都是什么意思?数秦科技奇秦科技是做什么的,大家了解过吗?民生电商民生电商与传统的电商有什么区别?欢迎页面windows欢迎界面色库赤峰中色库博红烨锌业有限公司就是冶炼厂在 赤峰的 什么地方,一 人知道吗???imqq官网中国v家官网网址
子域名查询 什么是域名解析 泛域名绑定 主机测评 flashfxp怎么用 老鹰主机 java主机 12u机柜尺寸 国外php空间 全能主机 环聊 服务器是干什么用的 宏讯 独享主机 华为云建站 qq金券 华为k3 可外链的相册 hostease 九零网络 更多