• 动态规划模板3|0-1背包问题


    二维数组0-1背包模板

    // 01 背包 二维数组
    #include <iostream>
    #include <string.h>
    using namespace std;
    
    int dp[21][1010];
    int w[21],c[21];
    
    int main() {
    	int N,V;
        cin>>N>>V;
        for(int i=1;i<=N;i++){
            cin>>w[i]>>c[i];
        }
        
        //核心部分
        for(int i = 1;i<=N;i++){
    		for(int j = 0;j<=V;j++){
    			if(j>=c[i]){
                    dp[i][j] = max(dp[i-1][j-c[i]] + w[i],dp[i-1][j]);
                }else{
    				dp[i][j] = dp[i-1][j];
                }
            }
        }
    
        cout<<dp[N][V]<<endl;
        return 0;
    }
    

    一维数组0-1背包模板

    0-1背包一维数组(滚动数组逆序大推小)
    int dp[MAX_V];
    
    for (int i = 1; i <= n; ++i)
        for (int j = v; j >= w[i]; --j)
            dp[j] = max(dp[j - w[i]] + v[i], dp[j]);
    
    
  • 相关阅读:
    数据类型
    python安装
    计算机基础
    Ajax--1
    ASP.net+MVC--2
    More lumber is required
    History Grading
    strcmp() Anyone?
    How Many Points of Intersection?
    Remember the Word
  • 原文地址:https://www.cnblogs.com/fisherss/p/10318537.html
Copyright © 2020-2023  润新知