zoukankan      html  css  js  c++  java
  • 完全背包问题

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 
     5 using namespace std;
     6 
     7 const int max_n = 100+2;
     8 const int max_W = 10000+2;
     9 
    10 int n,W;
    11 int dp[max_n][max_W];
    12 // 定义如下:
    13 // dp[i][j]:从前i个物品中,选出重量不超过j的物品
    14 // dp[0][j]=0
    15 // d[i][j]=?
    16 // if(j<w[i]) dp[i][j]=dp[i-1][j]
    17 // else dp[i][j]=max(dp[i-1][j],dp[i][j-w[i]] + v[i])
    18 int w[max_n],v[max_n];
    19 
    20 void solve()
    21 {
    22     memset(dp,-1,sizeof(dp));
    23     // dp[0][j] = 0
    24     // 初始条件
    25     for(int i=0;i<=n;++i)
    26     {
    27         dp[0][i]=0;
    28     }
    29 
    30     for(int i=1;i<=n;++i)
    31     {
    32         for(int j=0;j<=W;++j)
    33         {
    34             if(j<w[i])
    35             {
    36                 dp[i][j]=dp[i-1][j];
    37             }
    38             else
    39             {
    40                 // 貌似与0-1背包的区别,只在于这里了,将i-1改为i
    41                 // 当然,要了解实质
    42                 dp[i][j]=max( dp[i-1][j] , dp[i][j-w[i]] + v[i] );
    43             }
    44         }
    45     }
    46 }
    47 
    48 int main()
    49 {
    50     scanf("%d %d",&n,&W);
    51     for(int i=1;i<=n;++i)
    52     {
    53         scanf("%d %d",&w[i],&v[i]);
    54     }
    55     solve();
    56     printf("%d
    ",dp[n][W]);
    57     return 0;
    58 }
    59 
    60 /*
    61 3 7
    62 3 4
    63 4 5
    64 2 3
    65 */
  • 相关阅读:
    css: 组合选择器
    css: 基础选择器
    javascript设计模式:工厂模式
    wx: 小程序公共机制
    vue: 脚手架创建项目
    nodejs: express sequelize-cli
    css:flex和float margin布局
    自定义标签之inclusion_tag
    Django模型之Meta选项详解
    Django内置Admin
  • 原文地址:https://www.cnblogs.com/jishuren/p/12258485.html
Copyright © 2011-2022 走看看