1. 程式人生 > >usaco-Money Systems

usaco-Money Systems

display cto fill code algorithm 分享 string cout ret

題意:

給出幾種硬幣,求可用這幾種硬幣組合出價值為n的方案數。
分析:

設dp[i]表示組合出價值i的方案數,則,dp[i]=∑dp[i-val[j]]。

技術分享圖片
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define
LL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; int n,v; LL val[30],dp[10005]; void init(){ cin>>v>>n; range(i,0,v-1)cin>>val[i]; fill(dp,0); dp[0]=1; } void solve(){ range(i,0,v-1)range(j,val[i],n)dp[j]+=dp[j-val[i]]; cout
<<dp[n]<<endl; } int main() { init(); solve(); return 0; }
View Code

usaco-Money Systems