LightOJ 1232 - Coin Change (II) 【完全背包】

来源:互联网 发布:淘宝美工要会什么软件 编辑:程序博客网 时间:2024/05/22 05:25

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1232
题意:每个物品价值为val[i] (>=1),每个物品有k种,组成价值为k的方案数。完全背包。
解法:完全背包计数。
代码:

#include <stdio.h>#include <ctime>#include <math.h>#include <limits.h>#include <complex>#include <string>#include <functional>#include <iterator>#include <algorithm>#include <vector>#include <stack>#include <queue>#include <set>#include <map>#include <list>#include <bitset>#include <sstream>#include <iomanip>#include <fstream>#include <iostream>#include <ctime>#include <cmath>#include <cstring>#include <cstdio>#include <time.h>#include <ctype.h>#include <string.h>#include <assert.h>using namespace std;int n, k;int val[110];int dp[10100];int main(){    int t;    scanf("%d",&t);    for (int ca = 1; ca <= t; ca++)    {        scanf("%d%d",&n,&k);        for (int i = 0; i < n; i++)            scanf("%d",&val[i]);        //  完全背包计数        memset(dp,0,sizeof(dp));        dp[0] = 1;        for (int i = 0; i < n; i++)            for (int j = val[i]; j <= k; j++)               dp[j] = (dp[j] + dp[j-val[i]]) % 100000007;        printf("Case %d: %d\n",ca,dp[k]);    }    return 0;}
0 0