洛谷 - 多维01背包问题

一维01背包只涉及重量、价值、容量三个变量间的限制关系。

多维01背包实际上思路和一维一样,只不过让重量这个变量多了一种(比如时间?成本?)

实际上解决的思路就是再加一重循环就行。

 

例题:https://www.luogu.com.cn/problem/P1855

 

代码:

 1 #include <iostream>
 2 using namespace std;
 3 struct wish{
 4     int mc;
 5     int tc;
 6 };
 7 wish arr[110];
 8 int dp[210][210][110];
 9  //  time money total_num
10 int main(){
11     int num,money,time;
12     cin >> num >> money >> time;
13     for(int i = 1; i <= num; i++)
14         cin >> arr[i].mc >> arr[i].tc;
15     
16     
17     for(int i = 1; i <= time; i++)
18         for(int j = 1; j <= money; j++)
19             for(int p = 1; p <= num; p++){
20                 if(arr[p].mc <= j and arr[p].tc <= i){
21                     dp[i][j][p] = max(dp[i-arr[p].tc][j-arr[p].mc][p-1] + 1,dp[i][j][p-1]);
22                 }else dp[i][j][p] = dp[i][j][p-1];
23             }
24     
25     cout<<dp[time][money][num];
26     return 0;
27 }
posted @ 2020-01-04 15:40  popozyl  阅读(913)  评论(0编辑  收藏  举报