📄 最优分解问题.cpp
字号:
#include<iostream>
using namespace std;
void dicomp();
long a[3000];
long result[3000]={1,0};
long c;
long k;
long n;
long len;
long m;
int main()
{
scanf("%ld",&n);
dicomp();
for(len = 1;k>=0;k--)
{
for(c=0,m=0;m<len;m++)
{
long p = result[m]*a[k]+c;
result[m] = p%10000;
c = p/10000;
}
result[m] = c;
if(c>0) len++;
}
if(len==1) cout << result[len-1] << endl;
else
{
cout << result[len-1];
for(len--;len>0;len--)
printf("%04d",result[len-1]);
cout<<endl;
}
system("pause");
//return 0;
}
void dicomp()
{
k = 0;
if(n<3)
{
a[0] = 0;
return ;
}
if(n<5)
{
a[k]=1;
a[++k] = n-1;
return ;
}
a[0] = 2;
n -=2;
while(n>a[k]){
k++;
a[k] = a[k-1]+1;
n -=a[k];
}
if(n==a[k])
{
a[k]++;
n--;
}
for(long i=0;i<n;i++)
a[k-i]++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -