动态规划法示例:背包问题的解决

博客介绍了运用动态规划法计算背包问题,通过自底向上的方式计算最优解的值,给出了计算最优解值的代码实现。还在计算出最优解的值基础上,对问题构造出最优解,并给出了构造最优解的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**运用动态规划法计算背包问题
/**自底向上的方式计算最优解的值
int **KnapsackDP(int n,int W,int * Weights,float *Valus){
int i,w;
/**为二维数组申请空间**/
int **c=(int **)malloc(sizeof(int *)*(n+1));
for(i=0;i<=n;i++)
  c[i]=(int *)malloc(sizeof(int *)(W+1));

/**初始化二维数组 c数组的目的是为了构造最优解**/
for(w=0;w<=W;w++)
  c[0][w]=0;
for(i=1;i<=n;i++)
  c[i][0]=0;
 
  for(w=1;w<=W;w++){
     /**如果背包剩余重量大于物品重量 第i-1个放入物品的重量
    if(Weights[i-1]<=w){
            
            if(Values[i-1]<=w){
               if(Value[i-1]+c[i-1][w-Weight[i-1]]>c[i-1][w]
             {
                    c[i][w]=Values[i-1]+c[i-1][w-Weights[i-1]];
        }
                else{
                      c[i][w]=c[i-1][w];
                    }
                }  
           return c;
     }
/**在上面计算出了最优解的值基础上 对问题构造出最优解
void OutputKnapsackDP(int n,int W,int *Weights,float*Values,int **c){
  int x[n];
  int i;
  for(i=n;i>1;i--){
    if(c[i][W]==c[i-1][W])/**重量为W的最优选择的背包中不包含该物品
    x[i-1]=0;
     else{
    x[i-1]=1;
        W=W-Weights[i-1];/**更新背包目前的最大容量
    }
  }
if(c[1][W]==0)
   x[0]=0;
else
   x[0]=1;
for(i=0;i<n;i++)
    if(x[i]==1)
      printf("Weight:%d,Value:%f\n",Weights[i],Values[i]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲电脑的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值