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

Friendhosting(月1.35欧元),不限流量,9机房可选

今天9月10日是教师节,我们今天有没有让孩子带礼物和花送给老师?我们这边不允许带礼物进学校,直接有校长在门口遇到有带礼物的直接拦截下来。今天有看到Friendhosting最近推出了教师节优惠,VPS全场45折,全球多机房可选,有需要的可以看看。Friendhosting是一家成立于2009年的保加利亚主机商,主要提供销售VPS和独立服务器出租业务,数据中心分布在:荷兰、保加利亚、立陶宛、捷克、乌...

HostKvm($4.25/月),俄罗斯CN2带宽大升级,俄罗斯/香港高防限量5折优惠进行中

HostKvm是一家成立于2013年的国外VPS服务商,产品基于KVM架构,数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月,商家旗下俄罗斯、新加坡、美国、香港等节点带宽进行了大幅度升级,俄罗斯机房国内电信/联通直连,CN2线路,150Mbps(原来30Mbps)带宽起,目前俄罗斯和香港高防节点5折骨折码继续优惠中...

BuyVM老牌商家新增迈阿密机房 不限流量 月付2美元

我们很多老用户对于BuyVM商家还是相当熟悉的,也有翻看BuyVM相关的文章可以追溯到2014年的时候有介绍过,不过那时候介绍这个商家并不是很多,主要是因为这个商家很是刁钻。比如我们注册账户的信息是否完整,以及我们使用是否规范,甚至有其他各种问题导致我们是不能购买他们家机器的。以前你嚣张是很多人没有办法购买到其他商家的机器,那时候其他商家的机器不多。而如今,我们可选的商家比较多,你再也嚣张不起来。...

c语言背包问题为你推荐
ipad怎么分屏ipad怎样分屏操作系统在线课堂老师怎么在线授课?scanf_sscanf_s和以前的scanf是一样等级的吗???rbf神经网络rbf神经网络的输入参数个数有上限么weakhashmap在Java中ArrayList、LinkedList、HashMap的区别是什么md5值文件名后缀为MD5是什么文件。foxmail邮箱注册FOXMAIL邮箱在哪里可以注册?郭凡生馬云的簡介3Q李昊天李昊天这名字给多少分保留两位有效数字什么叫保留两位有效数字
个人虚拟主机 cn域名注册 厦门域名注册 Vultr kdata edis 国内永久免费云服务器 mach rak机房 搜狗抢票助手 中国特价网 国外网站代理服务器 日本bb瘦 南通服务器 美国堪萨斯 安徽双线服务器 新加坡空间 大化网 带宽测试 hdsky 更多