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;
}
posted @ 2026-05-17 16:55  shuiwangrenjia  阅读(6)  评论(0)    收藏  举报