ZKX's LAB

物品不可分割 背包问题 用c语言编程不可分割背包问题算法(求原创)

2020-10-05知识9

用动态规划法解 0/1背包问题 要求用c语言编写程序原代码。 1.动态规划#includeincludeinclude<;time.h>;#define N 100/货物的种类define M 10/货物的质量(千克)typedef struct good{int no;第几个物品int w;质量int p;可获利int flag;float pw;获得的最高利润}Good;void initGoodSet(Good a[],int n,int m);int planning(Good a[],int m,int n);动态规划void initGoodSet(Good a[],int n,int m){int i;srand(time(NULL));for(i=0;i;i+){a[i].no=i+1;a[i].w=rand()%m+1;a[i].p=rand()%n+1;a[i].pw=(float)a[i].p/a[i].w;}}int planning(Good a[],int m,int n)/动态规划{int c[N+1][M+1];int i,j;for(i=0;i;i+)for(j=0;j;j+)c[i][j]=0;for(i=1;i;i+)for(j=1;j;j+)if(a[i-1].w)if(a[i-1].p+c[i-1][j-a[i-1].w]>;c[i-1][j])c[i][j]=a[i-1].p+c[i-1][j-a[i-1].w];elsec[i][j]=c[i-1][j];elsec[i][j]=c[i-1][j];for(i=N,j=M;i>;=1;i-)/倒推求最优解if(c[i][j]>;c[i-1][j]){a[i-1].flag=1;j=j-a[i-1].w;}return(c[n][m]);}void main(){double Start,End;Good a[N];Start=clock();initGoodSet(a,N,M);printf(\"共获利%d\\n\",planning(a,M,N));End=clock();printf(\"所需时间为:%lf\\n\",(End-Start)/1000);}

用动态规划算法和贪婪算法求解01背包问题的区别 首先这两个算法是用来分别解决不同类型的背包问题的,不存在哪个更优的问题。当一件背包物品可以分割的时候,使用贪心算法,按物品的单位体积的价值排序,从大到小取即可。。

求背包问题贪心算法实例结果 找零钱问题:以人民币1元,2元,5元,10元,20元,50元,100元为例,要求所找的张数最少 背包问题:假设物体重量W1,W2.Wn其对应的价值为P1,P2.Pn,物体可分割,求装入。

用动态规划法解 0/1背包问题要求用c语言编写程序原代码。 #includeint main(){int n,c,cost[50],w[50];scanf(\"%d%d\",&n,&c);for(int i=0;i;i+){scanf(\"%d\",&cost[i],&w[i]);}int dp[100];for(int j=0;j;j+)for(int i=c;i>;=0;i-){if(dp[i][i-cost[j]]+w[j]){dp[i]=dp[i-cost[j]]+w[j];}}printf(\"%d\\n\",dp[c]);return 0;}

用动态规划法解 0/;1背包问题 要求用c语言编写程序原代码。 1.动态规划#include#include#include#define N 100/货物的种类#define M 10/货物的质量(千克)typedef struct good{int no;第几个物品int w;。

背包问题c++/说明算法也行 贪心算法将物品按pi/wi(0)从大到小排序当扫描到物品j时,假设背包容量剩余Mj,那么:如果Mj=0返回收益如果Mj重量的物品中,只装入Mj,收益增加pj*Mj/wj如果Mj>;wj:第j个物品全部装入,收益增加pj使用快排,算法复杂度O(nlogn)

动态规划背包问题与贪心算法哪个更优 首先这两个算法是用来分别解决不同类型的背包问题的,不存在哪个更优的问题。当一件背包物品可以分割的时候,使用贪心算法,按物品的单位体积的价值排序,从大到小取即可。当一件背包物品不可分割的时候,(因为不可分割,所以就算按物品的单位体积的价值大的先取也不一定是最优解)此时使用贪心是不对的,应使用动态规划。

#动态规划#背包问题#c语言#背包问题动态规划

随机阅读

qrcode
访问手机版