void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

给出几种硬币,数量不限,问你用着几种硬币能组成价值为n的种类是多少。

第一眼看到,求数量,就想到dp,直接找转移方程dp[i] = dp[i] + dp[i - coin[j]];

/*
ID: xvoid191
PROG: money
LANG: C++
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
long long coin[30],dp[10001];
int n,v;
int main()
{
freopen("money.in","r",stdin);
freopen("money.out","w",stdout);
scanf("%d %d",&v,&n);
memset(dp,0,sizeof(dp));
for(int i = 0; i < v; i++){
scanf("%d",&coin[i]);
}
dp[0] = 1;
for(int i = 0; i < v; i++){
for(int j = coin[i]; j <= n; j++ ){
dp[j] += dp[j - coin[i]];
}
}
printf("%lld\n",dp[n]);

}

 

posted on 2012-02-02 21:51  void-man  阅读(392)  评论(0)    收藏  举报