Bailian2759 神奇的口袋DP
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian2759 神奇的口袋DP相关的知识,希望对你有一定的参考价值。
总时间限制: 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的主要内容,如果未能解决你的问题,请参考以下文章