zoukankan      html  css  js  c++  java
  • 动态规划求解0/1背包

     1 #include<iostream>
    2 #define Max 20
    3 using namespace std;
    4 /**
    5 n:物品数 m:最大限额重量
    6 w[n]:n个物品的重量 p[n]n个物品的单价
    7 x[n]:n个物品是否被选中放入背包
    8 **/
    9 int n,m,w[Max],p[Max],*f[Max],x[Max];
    10 int main(){
    11 cin>>n>>m;
    12 for(int i=1;i<=n;i++){
    13 cin>>w[i]>>p[i];
    14 }
    15 for(int i=0;i<=n;i++){
    16 f[i]=new int[m+1];
    17 for(int j=0;j<=m;j++){
    18 f[i][j]=0;
    19 }
    20 }
    21 for(int i=1;i<=n;i++){
    22 for(int j=1;j<=m;j++){
    23 if(w[i]<=j){
    24 /*本物品的价值与背包剩余空间所能得到的最大价值之和*/
    25 /*与上一次得到的最大价值,即不放本物品的情况进行比较,选择是本次操作能得到较大价值*/
    26 f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+p[i]);
    27 }else f[i][j]=f[i-1][j];
    28 }
    29 }
    30 /*f[n][m]为所能得到的最大价值*/
    31 cout<<"max price:"<<f[n][m]<<endl;
    32 for(int i=n;i>0;i--){
    33 if(f[i][m]==f[i-1][m])x[i]=0;/*如果价值不变,则没有放入物品i*/
    34 else {
    35 x[i]=1;/*否则,标记,继续前推*/
    36 m-=w[i];
    37 }
    38 }
    39 for(int i=1;i<=n;i++)cout<<x[i];
    40 cout<<endl;
    41 for(int i=1;i<=n;i++){
    42 if(x[i]==1)cout<<"(w,p):("<<w[i]<<","<<p[i]<<")"<<endl;
    43 }
    44 for(int i=0;i<=n;i++)
    45 delete[] f[i];
    46 return 0;
    47 }
    -------------------------------~问世间情为何物,敲敲代码停不住~ -------------------------------
  • 相关阅读:
    appium 方法整理
    appium_获取元素状态
    Locust性能测试_参数关联
    Locust性能测试-参数化批量注册
    pytest_命令行传参
    pytest_函数传参和firture传参数request
    pytest_用例a失败,跳过测试用例b和c并标记失败xfail
    pytest_skip跳过用例
    pytest_使用自定义标记mark
    算法:迷宫问题
  • 原文地址:https://www.cnblogs.com/bigmengzi/p/2284944.html
Copyright © 2011-2022 走看看