题意:输入给出整数n,要求将1~n按一下规律排列,输出有多少种排列数量
条件1:第一位必须为1
条件2:相邻两位的差值不得超过2
思路:本题的状态转移没有直接的思路,可以考虑用dfs得出较小数的结果,然后找规律
ac代码:
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define INF 0x3f3f3f3f
#define pb push_back
#define int long long
#define Mirai ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<int,int> pii;
const int N=110;
int dp[N];
int n;
void solve()
{
cin>>n;
dp[1]=1;
dp[2]=1;
dp[3]=2;
for(int i=4;i<=n;i++)
{
dp[i]=dp[i-1]+dp[i-3]+1;
}
cout<<dp[n]<<endl;
}
signed main()
{
Mirai;
int T=1;
//cin>>T;
while(T--)
{
solve();
}
}