1. 程式人生 > >The King’s Ups and Downs(HDU 4489,動態規劃遞推,組合數,國王的遊戲)

The King’s Ups and Downs(HDU 4489,動態規劃遞推,組合數,國王的遊戲)

 

 

 

 

題意:

給一個數字n,讓1到n的所有數都以波浪形排序,即任意兩個相鄰的數都是一高一低或者一低一高

比如:1324   4231,再比如4213就是錯的,因為4高,2低,接下來1就應該比2高,但是它沒有

點選開啟題目連結

接下來思路用筆記截圖形式表示

 

 

 

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=25;
ll dp[maxn][
2]; ll c[maxn][maxn]; int main() { ll n; cin>>n; if(n==1) { cout<<1<<endl; return 0; } c[1][1]=1; for(ll i=1;i<=n;i++) c[i][0]=1; for(ll i=2;i<=n;i++) for(ll j=1;j<=i;j++) { c[i][j]
=c[i-1][j]+c[i-1][j-1]; } dp[1][0]=1;dp[1][1]=1; dp[0][0]=1;dp[0][1]=1; for(ll i=2;i<=n;i++) { for(ll j=0;j<=i-1;j++) { dp[i][0]+=c[i-1][j]*dp[j][0]*dp[i-1-j][1]; } dp[i][0]/=2; dp[i][1]=dp[i][0]; } cout<<dp[n][0
]+dp[n][1]<<endl; for(ll i=1;i<=n;i++) { printf("\ni=%lld:%lld,%lld\n",i,dp[i][0],dp[i][1]); } }