原題傳送門ios
碼風醜醜噠算法
儘管是一道入門級別的水題,n<10000,暴力就能夠過,但若n<100000000,就須要咱們偉大的動態規劃出場了QAQ。數組
運用DP,我作出了O(n)的算法。spa
dp[i]表示從上一個連號被中斷的數字的下一個到第i個的連號長度。code
有點難理解哈,看狀態轉移方程吧:
dp[i]=dp[i-1]+1(no[i]=no[i-1]+1)
dp[i]=1 (no[i]≠no[i-1]+1)
(no[]表示輸入的數組)ci
咱們還須要一個tans來記錄當前連號長度,若tans>ans,則將ans設置爲tans,若連號中斷,則將tans重置爲1。get
剩下的就是水代碼了QAQ.io
#include<iostream> #include<cstdio> using namespace std; const int MAX=10001; int dp[MAX],no[MAX]; int n,ans=1,tans; int main() { //初始化 dp[1]=1; //freopen("testdata(3).txt","r",stdin); //讀入 cin>>n; for(int i=1;i<=n;i++) { cin>>no[i]; } //裝叉走起 for(int i=2;i<=n;i++) { if(no[i]==no[i-1]+1) { dp[i]=dp[i-1]+1; tans++; if(tans>ans) { ans=tans; } } else { dp[i]=1; tans=1; } } //輸出 cout<<ans<<endl; return 0; }