• 多重背包问题 I


    多重背包问题 I

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

    输入格式:

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

    输出格式

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

    数据范围

    0<N,V≤100
    0<vi,wi,si≤100
    

    输入样例

    4 5
    1 2
    2 4
    3 4
    4 5
    

    输出样例:

    10
    

    cpp代码:

    //时间复杂度:O(N*V*k) 
    
    #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,l;
    		cin >>m >>n >> l;
    		for(int j = V; j >= m; j--){
    			for(int k = 1;k<=l&&k*m<=j;k++)
    				a[j] = a[j] > a[j-m*k]+n*k ? a[j] : a[j-m*k]+n*k;
    		}
    	}
    	cout << a[V];
    	return 0;
    }
    
  • 相关阅读:
    多表查询 left join
    对JS关于对象创建的几种方式的整理
    常见正则表达式
    spring
    富文本编辑器
    Struts2快速入门
    一个MySql Sql 优化技巧分享
    maven
    day3
    Spring MVC
  • 原文地址:https://www.cnblogs.com/chmod/p/15489932.html
Copyright © 2020-2023  润新知