zoukankan      html  css  js  c++  java
  • 第12章 动态规划 || 第8节 01背包练习题

    01背包练习题

    题目

    
    
    一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中,每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大。
    
    给定物品的重量w价值v及物品数n和承重cap。请返回最大总价值。
    测试样例:
    
    [1,2,3],[1,2,3],3,6
    
    返回:6
    
    
    

    解析

    class Backpack {
    public:
    	int maxValue(vector<int> w, vector<int> v, int n, int cap) {
    		// write code here
    
    		vector<vector<int>> dp(n + 1, vector<int>(cap + 1, 0));
    
    		for (int i = 1; i <= n;i++)
    		{
    			for (int j = 1; j <= cap ;j++)
    			{
    				if (j>=w[i-1]) //w.v下标-1
    				{
    					dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i-1]]+v[i-1]);
    				}
    				else
    				{
    					dp[i][j] = dp[i-1][j];
    				}
    			}
    		}
    		return dp[n][cap];
    	}
    
    	int maxValue_(vector<int> w, vector<int> v, int n, int cap) {
    		// write code here
    
    		vector<int> dp(cap + 1, 0);
    		vector<int> pre(cap + 1, 0); //记录上一行的dp值
    		for (int i = 0; i < n;i++)
    		{
    			for (int j = 1; j <= cap;j++)
    			{
    				if (j>=w[i])
    				{
    					dp[j] = max(pre[j],pre[j-w[i]]+v[i] );
    				}
    				else
    				{
    					dp[j] = pre[j];
    				}
    			}
    			pre = dp;
    		}
    		return dp[cap];
    	}
    };
    

    Refernce

  • 相关阅读:
    linux Mysql 安装
    百度地图的一些操作
    Angularjs Table
    liunx安装mongodb
    ARP协议
    Python获取IP的方式与意义
    selenium 的使用--持续更
    使用pyquery
    beautiful soup的用法
    内置函数
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8663138.html
Copyright © 2011-2022 走看看