zoukankan      html  css  js  c++  java
  • 多重背包问题 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;
    }
    
  • 相关阅读:
    210
    209
    208
    207
    定时任务crontab
    Python的zip与*zip函数的应用
    Python的reduce函数与map函数
    解析:cpu与io密集在何场景适合使用多进程,多线程,协程
    Python上下文(转载)
    C10K与C10M的问题
  • 原文地址:https://www.cnblogs.com/chmod/p/15489932.html
Copyright © 2011-2022 走看看