有多重限制的背包
咱们来看看一个题 洛谷 1855
题目自己看,我就不在这里放了
这里相当于一个有两重限制的01背包
就是既要满足小于1条件,也要小于2条件
代码很简单,加了一维而已
同样是01背包的思路
看看代码就懂了
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #include <cmath> 7 using namespace std; 8 const int N=200; 9 int n,m,t,tt[N],money[N],dp[500][500]; 10 int main() 11 { 12 scanf("%d %d %d",&n,&m,&t); 13 for(int i=1;i<=n;i++) 14 { 15 scanf("%d %d",&tt[i],&money[i]); 16 } 17 for(int i=1;i<=n;i++) 18 { 19 for(int j=m;j>=money[i];j--) 20 for(int k=t;k>=tt[i];k--) 21 { 22 dp[j][k]=max(dp[j][k],dp[j-money[i]][k-tt[i]]+1); 23 } 24 } 25 printf("%d\n",dp[m][t]); 26 }
很简单对吧