luogu題解 P5020 【貨幣系統 】
阿新 • • 發佈:2019-02-01
print 意義 pac name 原因 scanf amp noi noip
思路
判斷錢數是否可以轉化為其他錢數的和
與樓下不同,我沒有用sort。而是用了一個數組來特判。
思路其實只是簡單dp。
詳見代碼。
#include<cstdio> using namespace std; int t; int main() { scanf("%d",&t); while(t>0) { t--; int n; scanf("%d",&n); int a[30000],d[30000]={0},c=0,f[30000]={0}; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]>c)c=a[i]; d[a[i]]=-1;//註意,d數組開了特判,不用sort原因 } int jss=n; for(int i=1;i<=c;i++)//哈希 { int dd=0;//確保只減一次 for(int j=1;j<=n;j++) { if(i-a[j]==0)f[i]=a[j];//f[i]可以設為bool //f[i]=a[j]中a[j]無實際意義 if(i-a[j]>0) if(f[i-a[j]]!=0) { if(d[i]==-1&&dd==0)jss--,dd=1; f[i]=f[i-a[j]]+a[j]; } } } printf("%d\n",jss); } }
加油,我們離神犇會越來越近,祝大家noip2018RP++;
luogu題解 P5020 【貨幣系統 】