zoukankan      html  css  js  c++  java
  • #背包 ——二维费用的背包问题

    题目

    点这里传送

    思路

    主要就是多了一个和 体积 类似的 重量,多了一维;

    答案

    #include<bits/stdc++.h>
    using namespace std;
    const int n = 1010;
    int m[n], v[n], w[n], f[n][n], N, V, M; 
    int main(){
        cin >> N >> V >> M;
        for(int i = 1; i <= N; i ++)
            cin >> v[i] >> m[i] >> w[i];
            
        for(int i = 1; i <= N; i ++)
    		for(int j = V; j >= v[i]; j --)
    			for(int k = M; k >= m[i]; k --)
    				f[j][k] = max (f[j][k], f[j - v[i]][k - m[i]] + w[i]);
    
        cout << f[V][M];
        return 0;
        
    }
    /*+
    f[i][j][k] 表示从第一个物品到第 i 个物品, 体积不超过 j ,总重量不超过 k 的价值;最大 
    状态转移 : 选 或 不选 
    for(int i = 1; i <= n; i ++)
    	for(int j = 0; j <= V; j ++)
    		for(int k = 0; k <= M;k ++){
    			f[i][j][k] = f[i - 1][j][k];
    			if( j >= v[i] && k >= w[i]) f[i][j][k] = max (f[i][j][k], f[i - 1][j - v[i]][k - m[i]] + w[i]);
    		
    
    	*/
    		
    		
    
  • 相关阅读:
    javascript 原型世界浅析
    zookeeper
    Message Queue
    js给对象onclick事件赋值
    什么是堡垒机
    什么是数据库实例
    动态规划解决矩阵路径问题
    0-1背包问题
    回溯算法
    Python列表的复制
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026771.html
Copyright © 2011-2022 走看看