ZJ d887: 1.山脈種類(chain) - 7月 04, 2019


計算可行的數量,用DP求解
(圖為題目範例中n=3的情況)

可知上坡的數量≥於下坡的數量
於是可畫出上圖
得狀態轉移式為
dp[i][j]=dp[i-1][j]+dp[i][j-1]
以下為code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define AC ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

int main()
{
AC
ll n,dp[26][26];
memset(dp,0,sizeof(dp));
fill(dp[0],dp[0]+26,1);
for(ll i=1;i<26;i++)
for(ll j=i;j<26;j++)
dp[i][j]=dp[i-1][j]+dp[i][j-1];
while(cin>>n)
cout<<dp[n][n]<<'\n';
}
要是沒看過這種推上下坡的寫法完全想不出答案...
DP也太難了吧
還有這次又被忘記初始化陣列給卡住了
下次還要注意一點

留言

這個網誌中的熱門文章

TIOJ 1080 . A.逆序數對 (BIT解法)

ZJ d718: Waiting In Line

AtCoder Educational DP Contest E - Knapsack 2