zoukankan      html  css  js  c++  java
  • 【洛谷习题】榨取kkksc03

    题目链接:https://www.luogu.org/problemnew/show/P1855


    好迷的一道题啊,难道是逼着我用二维滚动数组???一开始写最简单的三维顺推只有60分,改成二维倒推就A了?好玄啊!

    这道题思路很简单,类比01背包,不过是费用变成了二维的。

     1 #include <cstdio>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 const int mmax = 205;
     7 
     8 int dp[mmax][mmax];
     9 
    10 int main() {
    11     int n, m, t;
    12     scanf("%d%d%d", &n, &m, &t);
    13     for (int i = 1; i <= n; ++i) {
    14         int nt, nm;
    15         scanf("%d%d", &nt, &nm);
    16         for (int j = m; j >= nm; --j)
    17             for (int k = t; k >= nt; --k)
    18                 dp[j][k] = max(dp[j][k], dp[j - nm][k - nt] + 1);
    19     }
    20     printf("%d", dp[m][t]);
    21     return 0;
    22 }
    AC代码

    然而可爱的我怎么可能会不知道哪里错了呢(后来才知道)?

    我用三维的时候,金钱、时间都是从花费开始枚举的,这就导致金钱时间不足的情况都成了0,但是应该继承没满足的情况。二维背包自然不会出现这种问题。

  • 相关阅读:
    线性表ADT实现
    基数排序
    二叉树之已知前序和中序遍历求后序遍历(POJ2255 &&HDU )
    acm头文件
    快排
    快读
    二分
    数据结构大师
    AC_2. 01背包问题
    AC_94. 递归实现排列型枚举
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9618216.html
Copyright © 2011-2022 走看看