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

Hostodo,美国独立日特价优惠,四款特价VPS云服务器7折,KVM虚拟架构,NVMe阵列,1核512M内存1Gbps带宽3T月流量,13.99美元/月,赠送DirectAdmin授权

Hostodo近日发布了美国独立日优惠促销活动,主要推送了四款特价优惠便宜的VPS云服务器产品,基于KVM虚拟架构,NVMe阵列,1Gbps带宽,默认分配一个IPv4+/64 IPv6,采用solusvm管理,赠送收费版DirectAdmin授权,服务有效期内均有效,大致约为7折优惠,独立日活动时间不定,活动机型售罄为止,有需要的朋友可以尝试一下。Hostodo怎么样?Hostodo服务器好不好?...

ManSora:英国CN2 VPS,1核/1GB内存/10GB SSD/1TB流量/100Mbps/KVM,$18.2/月

mansora怎么样?mansora是一家国人商家,主要提供沪韩IEPL、沪日IEPL、深港IEPL等专线VPS。现在新推出了英国CN2 KVM VPS,线路为AS4809 AS9929,可解锁 Netflix,并有永久8折优惠。英国CN2 VPS,$18.2/月/1GB内存/10GB SSD空间/1TB流量/100Mbps端口/KVM,有需要的可以关注一下。点击进入:mansora官方网站地址m...

DogYun27.5元/月香港/韩国/日本/美国云服务器,弹性云主机

DogYun怎么样?DogYun是一家2019年成立的国人主机商,称为狗云,提供VPS及独立服务器租用,其中VPS分为经典云和动态云(支持小时计费及随时可删除),DogYun云服务器基于Kernel-based Virtual Machine(Kvm)硬件的完全虚拟化架构,您可以在弹性云中,随时调整CPU,内存,硬盘,网络,IPv4路线(如果该数据中心接入了多条路线)等。DogYun弹性云服务器优...

c语言背包问题为你推荐
showwindowvb ShowWindow 的使用方法 隐藏/显示 指定窗口 (完整代码)谢谢查字网騳骉,怎样读?拼音郭凡生馬云的簡介3Q电子日历我想做个项目 如何在电子日历中进行时间的选择李昊天铠甲勇士2刑天的李昊天秘密是什么editplus破解版DBTools Manager Professional 破解版在哪里可以下载?inode智能客户端我的电脑上inode智能客户端连接网络时,提示~服务器没有响应,请确认当前认证网卡已连接到合适的网spawningvc出现error spawning c1.exe怎么解决?smartupload使用SmartUpload实现文件上传时需要对表单设置哪些属性layoutsubviews如何让NSSplitView的子View的大小固定
花生壳域名贝锐 krypt 新秒杀 vpsio uk2 mediafire 网页背景图片 华为网络硬盘 炎黄盛世 网络空间租赁 流媒体加速 dnspod 上海电信测速 服务器论坛 ledlamp asp空间 聚惠网 蓝队云 最新优惠 海尔t68g 更多