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

    题目来源

    https://www.acwing.com/problem/content/description/2/

    思路

    基本按照该文章 https://www.jianshu.com/p/a66d5ce49df5 思路码出的代码,感觉动态规划的本质还是在不断的打表,空间上还能用滚动数组优化,先挖个坑以后再补

    代码

    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define MAXN 1005
    int dp[MAXN][MAXN];//dp[n][v]前n个数在重量为v的情况下代表的价值
    
    int main()
    {
        int N,V;
        cin>>N>>V;
        int v[MAXN]={0};
        int w[MAXN]={0};
        for(int i = 1; i <= N; i ++)
        {
            cin>>v[i]>>w[i];
        }
        for(int i = 1; i <= N; i ++)//以1为初始值是因为默认dp[0][0]为0,方便代码书写 
        {
            for(int j = 1; j <= V; j ++)
            {
                if(j >= v[i])
                {
                    dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]);//转移方程 
                }
                else
                {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        cout<<dp[N][V];
        return 0;
    }
    
    
    
     
     
  • 相关阅读:
    Maria 与Ann的故事
    引语
    Preface
    Chapter 1 Foundation
    Roman to Integer
    Integer to Roman
    Container with most water
    palindrome number
    String to Integer (atoi)
    Reverse Integer
  • 原文地址:https://www.cnblogs.com/rebloom000/p/13971032.html
Copyright © 2011-2022 走看看