zoukankan      html  css  js  c++  java
  • p4141(消失之物)

     

    题目描述

    ftiasch 有 N 个物品, 体积分别是 W1, W2, …, WN。 由于她的疏忽, 第 i 个物品丢失了。 “要使用剩下的 N – 1 物品装满容积为 x 的背包,有几种方法呢?” — 这是经典的问题了。她把答案记为 Count(i, x) ,想要得到所有1 <= i <= N, 1 <= x <= M的 Count(i, x) 表格。

    输入格式

    第1行:两个整数 N (1 ≤ N ≤ 2 × 10^3)N(1N2×103) 和 M (1 ≤ M ≤ 2 × 10^3)M(1M2×103),物品的数量和最大的容积。

    第2行: N 个整数 W1, W2, …, WN, 物品的体积。

    输出格式

    一个 N × M 的矩阵, Count(i, x)的末位数字。

    输入输出样例

    输入 #1
    3 2
    1 1 2
    输出 #1
    11
    11
    21

    说明/提示

    如果物品3丢失的话,只有一种方法装满容量是2的背包,即选择物品1和物品2。

    题面如上。

    看完会很自然地发现它是一个dp(计算方案数)

    然后,如果不是漏一个的话,会非常简单(选或不选,硬算),方程式也简单得很,我这种弱鸡都能一眼看出来。

    考虑一下删一个元素该怎么办。。。

    首先,我们可以想到,它可能是从满的里面删掉那个物品。

    经过漫长的思考,得到了以下方程式:

    意思是:如果可以删的话,达到j重量不选a[i],那我们就把选它的方案数给删去,

    于是还需要处理以下全选的情况,

    所以这题就没有了吧。。

    坑点:

    1、本题的输出非常玄学,得换连续输出两个数再换一次行,直接暴毙

    2、蒟蒻看了半天没看出来要取模,最后发现是末位数字啊!!对10取模。

    应该就是这样了。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=5005;
    int n,m;
    int a[maxn];
    int dp[maxn][2];//µ½´ïj´óСʱµÄ·½°¸Êý 
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        dp[0][0]=dp[0][1]=1;
        for(int i=1;i<=n;i++)
        { 
            for(int j=m;j>=a[i];j--)
            {
                dp[j][0]+=dp[j-a[i]][0];
                dp[j][0]%=10;
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(j-a[i]>=0)
                dp[j][1]=(dp[j][0]-dp[j-a[i]][1]+10)%10;
                else
                dp[j][1]=dp[j][0]%10;
                printf("%d",dp[j][1]);
            }
            cout<<endl;
        }
        return 0;
    }

    (完)

  • 相关阅读:
    高精度、大整数幂取模
    关于正则表达式
    003.android资源文件剖析(Resources)
    myBatis 基础测试 表关联关系配置 集合 测试
    Android应用开发学习笔记之播放音频
    移植一个开源点餐网到SAE平台上
    6.0RMB MP3所看到的……
    [读书笔记]设计原本[The Design of Design]
    递归 和 非递归 遍历二叉树
    Android应用开发学习笔记之播放视频
  • 原文地址:https://www.cnblogs.com/ajmddzp/p/11224122.html
Copyright © 2011-2022 走看看