zoukankan      html  css  js  c++  java
  • 二维背包

      前面的限制条件只有背包的重量一个,二维背包讲的是约束条件有两个。

      给出背包的体积和能承受的重量,要求满足这两个条件的时候,价值最大。

      状态转移方程:

      dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+pay[i])
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1600;
     4 int v[maxn],w[maxn],pay[maxn];
     5 ///v表示背包所占的体积,w表示重量看,pay表示价值
     6 int dp[maxn][maxn];
     7 int n,c,l; ///n表示物品的个数,c表示体积,l表示重量
     8 
     9 int main()
    10 {
    11     ios::sync_with_stdio(0); std::cin.tie(0);
    12     int T;
    13     while( cin >> T){
    14         while(T--){
    15             cin >> n >> c >> l;
    16             memset( dp, 0, sizeof dp);
    17             for(int i=1;i<=n;i++)
    18                 cin >> v[i] >> w[i] >> pay[i];
    19 
    20             for(int i=1;i<=n;i++){
    21                 for(int j=c;j>0;j--){
    22                     if(j<v[i]) break;
    23                     for(int k=l;k>0;k--){
    24                         if(j>=v[i]&&k>=w[i])
    25                         dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+pay[i]);
    26                         else break;
    27                     }
    28                 }
    29             }
    30 
    31             cout << dp[c][l] << endl;
    32         }
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    P1036 选数(python)解题报告
    P1009 阶乘之和(python)解题报告
    P1002 过河卒(python) 解题报告
    来一波数据结构
    KMP算法
    链表实现约瑟夫
    闲谈Tampermonkey
    CF#574E. OpenStreetMap 题解
    洛谷 P2033 Chessboard Dance
    洛谷 P2056 采花
  • 原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/9042324.html
Copyright © 2011-2022 走看看