用貪心,可以把2 ~ 9 的階乘都拆成幾個 2! , 3! , 5! , 7! 的乘積,並且可以知道最佳解裡面所有數字一定都是 2 , 3 , 5 , 7 ,因為如果有其它的數字就可以再拆開,得到更大的數。而可以得到 7! 的個數必需要等於原本數字裡面的數碼>=7 的個數,而當 7! 確定之後 5! 的個數也確定了,剩下 2! 和 3! 的個數,解聯立就解的出來要取幾個,所以這樣取會是最佳的。
code :
#include<bits/stdc++.h> #define LL long long using namespace std; int num[5],p[]={2,3,5,7} ; char s[20] ; main() { int n ; scanf("%d%s",&n,s+1) ; for(int i=1;i<=n;i++) { int x=s[i]-'0' ; if(x>=7) { num[3]++ ; if(x==8) num[0]+=3 ; if(x==9) num[1]+=2 , num[0]++ ; } else if(x>=5) { num[2]++ ; if(x==6) num[1]++ ; } else if(x>=3) { num[1]++ ; if(x==4) num[0]+=2 ; } else if(x==2) num[0]++ ; } for(int i=3;i>=0;i--) while(num[i]--) printf("%d",p[i]) ; printf("\n") ; }
沒有留言:
張貼留言