三轮【完全背包】:
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
问题描述:
小k有一个三轮,它最多可以装105大小的东西
小k有n种商品,他要准备出摊了
每种商品体积为vi,都有105件
输出凑成1~m的体积的总方案数
输出可能会很大,请对大质数19260817取模
输入描述:
第一行两个整数n,m,
接下来n行,每行一个数代表vi
输出描述:
一个数ans表示总方案数
示例:
输入
2 8
1
3
输出
17
说明
从1~m体积的方案数分别为:
1
1
2
2
2
3
3
3
ps:典型的完全背包
代码块:
import java.util.Scanner;
public class 三轮 {
static int mod = 19260817;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
int[] num = new int[n];
for (int i = 0; i < n; i++) {
num[i] = input.nextInt();
}
int[] dp = new int[m+1];//dp[i]为i体积的放案数
dp[0] = 1;
//完全背包
for (int i = 0; i <n ; i++) {
for (int j = num[i]; j <=m ; j++) {
dp[j] = (dp[j] + dp[j-num[i]])%mod;
}
}
int sum = -1;
for (int a : dp) {
sum = (sum + a)%mod;
}
System.out.println(sum);
}
}