zoukankan      html  css  js  c++  java
  • 消失之物(永远撸不完的背包)

    消失之物(thing.pas/c/cpp)
    【问题描述】
    yd有 N 个物品, 体积分别是 W1, W2, ..., WN。 由于她的疏忽, 第 i 个物品丢失了。 “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢?” -- 这是经典的问题了。他把答案记为 Count(i, x) ,想要得到所有1 <= i <= N, 1 <= x <= M的 Count(i, x) 表格。
    【输入格式】
    第1行:两个整数 N  和 M ,物品的数量和最大的容积。
    第2行: N 个整数 W1, W2, ..., WN, 物品的体积。
    【输出格式】
    一个 N × M 的矩阵, Count(i, x)的末位数字。
    【样例输入】
    3 2
    1 1 2
    【样例输出】
    11
    11
    21
    【数据规模】
    10% n <= 20 m <= 100
    50% n <= 500 m <= 500
    80% n <= 1000 m <= 1000
    100% n <= 2000 m <= 2000

    题解:

    下面这是正常的式子:

    f[i][j]=f[i-1][j]+f[i-1][j-w[i]](不放i个数+放i个数)

    但是你一行一行这么干撸肯定TLE,要有想法的撸(丧失……)

    设g[i][j]就为结果那个矩阵,即g[i][j]表示除去i,剩下的填满j容量背包的方案数

    则有g[i][j]=f[n][j]-g[i][j-w[i]]

    这个式子就相当做第i行时于把上面f那个式子的后面的放的个数给减掉了……太巧妙了

    本蒟残首先想的是撸出第一行看看能不能递推出后面,但是发现想多了……

    后来蒟残想没行只做那一个,也就是和题解思路差不多,但是蒟残没想到减……发现开个3维记下子好像可以但是要MLE……所以挂了……

  • 相关阅读:
    A*算法在栅格地图上的路径搜索(python实现)_1.1
    python基础
    Celery ---异步任务,定时任务,周期任务
    Flask-Script
    Flask-SQLAlchemy
    SQLAlchemy的增删改查 一对多 多对多
    Django Rest framework
    django之forms组件
    缓存, 队列(Redis,RabbitMQ)
    django框架(2)
  • 原文地址:https://www.cnblogs.com/wmrv587/p/3541910.html
Copyright © 2011-2022 走看看