P1028 [NOIP 2001 普及组] 数的计算
题解
动态规划
对于一个数n,例如n等于12,那么答案序列就是:
- 12
- 12 6……
- 12 5……
- 12 4……
……依次类推
假设以n开头的数列一共有f[n]个,那么f[12] = 1 + f[6] + f[5] + f[4] + f[3] + f[2] + f[1]。
动态规划的思想,直接双重循环解决问题。
#include<iostream>
using namespace std;
long long f[1010];
int main()
{
int n;
cin>>n;
for(int i = 1 ; i <= n ; i++)
{
f[i] = 1;
for(int j = 1 ; j <= i / 2 ; j ++)
{
f[i] += f[j];
}
}
cout<<f[n]<<endl;
return 0;
}

浙公网安备 33010602011771号