咱们来看看一个题 洛谷 1855
题目自己看,我就不在这里放了
这里相当于一个有两重限制的01背包
就是既要满足小于1条件,也要小于2条件
代码很简单,加了一维而已
同样是01背包的思路
看看代码就懂了
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 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 }
很简单对吧