canonical- Canonical Coin Systems (dp&&貪心)
阿新 • • 發佈:2018-12-17
連結:
題意:
問一種貨幣體系,對於任意數量的money,按照貪心和dp完全揹包的做法拼湊,用的紙幣數量是否一致。
思路:
分別跑,比較即可。
#include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int maxn = 2e6 + 10; int n,top; int dp[maxn],gr[maxn],a[110]; bool judge() { for(int i = 0 ; i < maxn ; i++) //容量 { for(int j = 0; j < n ; j++) //數量 { if(i - a[j] >= 0) { dp[i] = min(dp[i],dp[i-a[j]]+1); gr[i] = gr[i-a[j]] + 1; } } if(dp[i] != gr[i]) return 0; } return 1; } int main() { memset(dp,INF,sizeof dp); memset(gr,0,sizeof gr); dp[0] = 0; cin>>n; for(int i = 0 ; i < n; i++) cin>>a[i]; top = a[n-1] * 2; if(judge()) cout<<"canonical"<<endl; else cout<<"non-canonical"<<endl; return 0; }