Bailian2759 神奇的口袋DP

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian2759 神奇的口袋DP相关的知识,希望对你有一定的参考价值。

2759:神奇的口袋(2)

总时间限制: 1000ms 内存限制: 65536kB
描述
有一个神奇的口袋,总的容积是400,用这个口袋可以变出一些物品,这些物品的总体积必须是400。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是400,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。
输入
输入的第一行是正整数n (1 <= n <= 200),表示不同的物品的数目。接下来的n行,每行有一个1到400之间的正整数,分别给出a1,a2……an的值。
输出
输出不同的选择物品的方式的数目对10000取模的结果(因为结果可能很大,为了避免高精度计算,只要求对10000取模的结果)。
样例输入
3
200
200
200
样例输出
3

问题链接Bailian2759 神奇的口袋(2)
问题简述:(略)
问题分析:用DP来解决,不解释。参见参考链接。
程序说明:(略)
参考链接Bailian2755 神奇的口袋【递归+DP】
题记:(略)

AC的C语言程序如下:

/* Bailian2759 神奇的口袋(2) */

#include <stdio.h>

#define N 200 + 1
#define MAXI 400
#define MOD 10000

int num[MAXI + 1] = 1, a[N];

int main()

    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);

    for (int i = 1; i <= n; i++)
        for (int j = MAXI; j >= a[i]; j--)
            num[j] = (num[j - a[i]] % MOD + num[j] % MOD) % MOD;

    printf("%d\\n", num[MAXI]);

    return 0;

以上是关于Bailian2759 神奇的口袋DP的主要内容,如果未能解决你的问题,请参考以下文章

动态规划-神奇的口袋V1

动态规划-神奇的口袋V2

神奇的口袋

1114.神奇的口袋

1761:神奇的口袋

神奇的口袋(百练2755)