ZJ d887: 1.山脈種類(chain) - 7月 04, 2019
計算可行的數量,用DP求解
(圖為題目範例中n=3的情況)
可知上坡的數量≥於下坡的數量
於是可畫出上圖
得狀態轉移式為
dp[i][j]=dp[i-1][j]+dp[i][j-1]
(圖為題目範例中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也太難了吧
還有這次又被忘記初始化陣列給卡住了
下次還要注意一點
DP也太難了吧
還有這次又被忘記初始化陣列給卡住了
下次還要注意一點
留言
張貼留言