NYOJ 469 擅长排列的小明 II (dp问题)
生活随笔
收集整理的這篇文章主要介紹了
NYOJ 469 擅长排列的小明 II (dp问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=469
思路:動態規劃dp
題目分析:
由于第一個只能是1,則第二個數只能是2,3
當第二個數是2時,則相當于是對2-n的排列,相當于對1-(n-1)的排列,即s[n-1];
當第二個數是3時,第三個數只能是2,4,5
此時,當第三個數為2時,則是對3-n的排列,相當于對1-(n-3)的排列,即s[n-3]
當第三個數為4時,此時,第四個數只能是2,除了n等于4時,對于n大于4的排列,都不符合要求,
而n為4時,與第三個數為5時的排列相同,所以, 可認為第三個數為4時不符合要求,
當第三個數為5時,只有一種情況,1,3,5,6,7,9,……,10,8,6,4,2,
所以,可得遞推公式,s[i]=s[i-1]+s[i-3]+1.初始化s[]={0,1,1,2}
代碼如下:
1 #include <stdio.h> 2 int main() 3 { 4 int n,dp[57]={0,1,1,2}; 5 for(int i=4;i<=55;i++) 6 dp[i]=dp[i-1]+dp[i-3]+1; 7 while(~scanf("%d",&n)) 8 { 9 printf("%d\n",dp[n]); 10 } 11 return 0; 12 } 13轉載于:https://www.cnblogs.com/mycapple/archive/2012/08/23/2652978.html
總結
以上是生活随笔為你收集整理的NYOJ 469 擅长排列的小明 II (dp问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老鼠与毒药问题
- 下一篇: 如何更好的格式化Objective-C代