[洛谷]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 ;
}

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号