usaco-Money Systems
阿新 • • 發佈:2018-07-17
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) #defineView CodeLL 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; }
usaco-Money Systems