zoukankan      html  css  js  c++  java
  • 有多重限制的背包

    咱们来看看一个题 洛谷 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
    ",dp[m][t]);
    26 }

    很简单对吧

  • 相关阅读:
    杭电1058
    动态规划之背包模版
    按字典序依次打印只由1~n组成的n位数
    杭电1029
    杭电1257
    杭电2191
    杭电1114
    杭电2602
    南阳975
    杭电2138
  • 原文地址:https://www.cnblogs.com/wzrdl/p/9781663.html
Copyright © 2011-2022 走看看