《趣学算法》动态规划

Posted jasonpeng1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《趣学算法》动态规划相关的知识,希望对你有一定的参考价值。

2019-11-30

10:05:54

技术图片

 

 

#include <bits/stdc++.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define maxn 10005
#define M 105
int c[M][maxn];
int w[M],v[M];
int x[M];//x[M]表示第i个物品是否放入购物车
int main(){
    int i,j,n,W;
    cout<<"请输入物品的个数: ";
    cin>> n;
    cout<<"请输入购物车的容量:";
    cin>>W;
    cout<<"请输入每个物品的重量w 和 价值 v,用空格分开:";
    for(int i=1;i<=n;++i){
        cin>>w[i]>>v[i];
    }
    for(i=0;i<=n;++i){
        c[i][0]=0;
    }
    for(j=0;j<=W;++j){
        c[0][j] = 0;
    }
    for(i=1;i<=n;++i){
        for(int j=1;j<=W;++j){
            if(j<w[i]){//当物品重量大于购物车容量时,不放入 
                c[i][j] = c[i-1][j];
            }
            else{
                c[i][j] = max(c[i-1][j],c[i-1][j-w[i]]+v[i]);
            }
        }
    }
    cout<<"装入购物车的最大价值为: "<<c[n][W]<<endl;
    //逆向构造最优解
    j = W;
    for(i=n;i>0;--i){
        if(c[i][j]>c[i-1][j]){
            x[i]=1;
            j -= w[i];
        }else{
            x[i] = 0;
        }
    }
    cout<<"装入购物车的物品为:"<<endl;
    for(int i=1;i<=n;++i){
        if(x[i]==1){
            cout<<i<<" ";
        }
    }
    system("pause");
    return 0;
     
} 

 

 

 

 

 

 

 

 

 

 

 

以上是关于《趣学算法》动态规划的主要内容,如果未能解决你的问题,请参考以下文章

动态规划算法秘籍

详细实例说明+典型案例实现 对动态规划法进行全面分析 | C++

游艇租赁最小代价——动态规划求解

线性规划网络流之最短增广路算法

算法动态规划 ⑤ ( LeetCode 63.不同路径 II | 问题分析 | 动态规划算法设计 | 代码示例 )

算法动态规划 ⑤ ( LeetCode 63.不同路径 II | 问题分析 | 动态规划算法设计 | 代码示例 )