動態規劃【5】之二維費用揹包

例題:luogu1855 榨取kkksc03

這道題是很明顯的 0-1 揹包問題,可是不同的是選一個物品會消耗兩種價值(經費、時間)。這種問題其實很簡單:方程基本不用變,只需再開一維,同時轉移兩個價值就行了!(完全、多重揹包同理)1

代碼如下:

/* ***********************************************
Author        : VFVrPQ
Created Time  : 六  2/29 15:51:23 2020
File Name     : luogu1855榨取kkksc03.cpp
Problem       : 
Description   : 
Solution      : 
Tag           : 
************************************************ */

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <iomanip>
using namespace std;
#define DEBUG(x) cout<<x<<endl;
const int N = 1e2+10;
const int M = 1e9+7;
const int INF = 1e9+7;

int n,m,T;
int a[N],b[N];
int dp[N][222][222];
int main()
{
    cin>>n>>m>>T;
    for (int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
    }
    for (int i=1;i<=n;i++){
        for (int j=0;j<=m;j++){
            for (int k=0;k<=T;k++){
                dp[i][j][k] = dp[i-1][j][k];
                if (j>=a[i] && k>=b[i] && dp[i][j][k]<dp[i-1][j-a[i]][k-b[i]]+1){
                    dp[i][j][k] = dp[i-1][j-a[i]][k-b[i]]+1;
                }
            }
        }
    }
    cout<<dp[n][m][T];
    return 0;
}

  1. https://oi-wiki.org/dp/knapsack/#_6 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章