有多重限制的背包

咱们来看看一个题 洛谷 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 }

很简单对吧

posted @ 2018-10-13 09:24  没有名字的大佬  阅读(347)  评论(0编辑  收藏  举报