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

    完全背包问题

    有 N 种物品和一个容量是 V的背包,每种物品都有无限件可用。
    
    第 i种物品的体积是 vi,价值是 wi。
    
    求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
    
    输出最大价值。
    

    输入格式:

    第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。
    
    接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。
    

    输出格式

    输出一个整数,表示最大价值。
    

    数据范围

    0<N,V≤1000
    0<vi,wi≤1000
    

    输入样例

    4 5
    1 2
    2 4
    3 4
    4 5
    

    输出样例:

    10
    

    cpp代码:

    //时间复杂度:O(N*V) 
    
    
    #include <iostream> 
    #include <vector> 
    using namespace std;
    int main(){
    	int N,V;
    	cin >> N >> V;
    	vector<int> a(V+1,0);
    	
    	for(int i = 0; i < N ;i++){
    		int m,n;
    		cin >> m >> n;
    		for(int j = m; j <= V; j++){
    //由于物品有多个,可能要验证当前是否拿第i个物品所依赖的状态已经取过若干个第i个物品了
    //所以v的遍历是由小到大递增的
    			a[j] = a[j] > a[j-m]+n ? a[j] : a[j-m]+n;
    		}
    	}
    	cout << a[V];
    	return 0;
    }
    
    
    
  • 相关阅读:
    D3.js:交互式操作
    D3.js:Update、Enter、Exit
    D3.js:动态效果
    D3.js:完整的柱形图
    D3.js:坐标轴
    D3.js
    ES 6 : 数组的扩展
    ES 6 : Math对象的扩展
    拉勾网企业图片列表效果
    拉勾网图片切换效果
  • 原文地址:https://www.cnblogs.com/chmod/p/15489933.html
Copyright © 2011-2022 走看看