Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
150954 | lrf820215 | 最优分解 | C++ | 解答错误 | 0 | 0 MS | 204 KB | 875 | 2024-06-10 10:05:39 |
#include<stdio.h> #include<string.h> int a[1000]; int solve(int n) { if(n<5) return n; memset(a,0,sizeof(a)); int k=1,sum=1; a[1]=2; n=n-2; while(n>a[k]) { k++; a[k]=a[k-1]+1; n=n-a[k]; } for(int i=1; i<=k; i++) printf("%d ",a[i]); printf("\n"); /*如果n剩下的值等于a[k],那么均匀分配前面则多1,所以a[k]再加1 比如n=19 分解成 2,3,4,5 剩下n=5 均匀分配给前面各项2+1,3+1,4+1,5+1,此时多1再添加再最后一项即可 */ if(n==a[k]) { a[k]++; n--; } for(int i=0; i<n; i++) a[k-i]++; for(int i=1; i<=k; i++) sum*=a[i]; return sum; } int main() { int n; scanf("%d",&n); int t=solve(n); printf("%d\n",t); return 0; }