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……所以挂了……

  • 相关阅读:
    影像数据的裁切和保存(源代码)
    C#读取EXIF信息类多
    C#里到底怎么样才能嵌入汇编?
    using和回收资源
    两个由栈组成的队列和两个由队列组成的栈
    C解两道题
    Inside WUAIntroduction
    轮子和做轮子
    致曾经整过的"框架"
    C#动态分配一维数组和二维数组函数
  • 原文地址:https://www.cnblogs.com/wmrv587/p/3541910.html
Copyright © 2011-2022 走看看