[洛谷]P1028数的计算 原创
算法标签:递推
题目来源 luogu
题目简介
思路
看着肯定是有规律的数列,我们直接试图找逻辑
s是当前的数值,n是存在的组合的数量,exm是直接把组合举例
s=0 n=1 0; s=1 n=1 1; s=2 n=2 exm:12,2,s=3 n=2 exm:13,1; s=4 n=4 exm:14,13,24,124;s=5 n=4 exm:15,25,125,5; s=5 n=3 观察发现: if n%2==1 ansN=ansN-1 else ansN+=ansN(N/2)
AC代码
方法一:递推
#include <iostream>
using namespace std;
const int N=1e4;
int f[N];
int main()
{
f[1]=1;
int n;
cin>>n;
for(int i=2;i<=n;i++)
if(i%2==1)f[i]=f[i-1];
else f[i]=f[i-1]+f[i/2];
cout<<f[n];//输出指定答案
return 0;
}
方法2:递归
压缩成递归 如果是n的话会从1到n递归,但是分支太多,事实上很有超时的可能
#include<iostream>
using namespace std;
int res=0;
void dfs(int n)
{
res++;
for(int i=1;i<=n/2;i++)dfs(i);
}
int main()
{
int n;
cin>>n;
dfs(n);
cout<<res;
return 0 ;
}
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!