洛谷 - 多维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 }
---- suffer now and live the rest of your life as a champion ----