NYOJ 题目541 最强DE 战斗力(动态规划 大数,数学)
??
最强DE 战斗力
时间限制:
1000
?ms ?|? 内存限制:
65535
?KB
难度:
3
定理:当把一个数n拆分成他的加数因子的乘积的时候,尽量拆成3会使成绩最大,当最后不足3的时候,如果剩下1,则和已经分开的3结合成四!这样,就能保证乘积最大! ac代码 #include<stdio.h> #include<string.h> int a[10010]; int max; void muti(int n) { int i; for(i=0;i<max;i++) { a[i]=a[i]*n; } for(i=0;i<max;i++) { if(a[i]>=10) { a[i+1]+=a[i]/10; a[i]%=10; } if(a[max]) max++; } } int main() { int t; scanf("%d",&t); while(t--) { int n,c,k,i; memset(a,sizeof(a)); a[0]=1; max=1; scanf("%d",&n); if(n<4) { printf("%dn",n); continue; } k=n%3; c=n/3; if(k==1) { k=4; c--; } for(i=0;i<c;i++) { muti(3); } if(k) { muti(k); } for(i=max-1;i>=0;i--) { printf("%d",a[i]); } printf("n"); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |