题目类型:dp
题意:连续串的个数...(连续串:单调串--升序||降序)
解法:dp1[i]表示前i-1个数字的串+第i个数字按升序添加后的连续串的个数;dp2[i]表示前i-1个数字的串+第i个数字按降序添加后的连续串的个数;状态转移方程:(见代码)
Code:
#include <bits/stdc++.h>
using namespace std;
int n,A[100005];
int dp1[100005],dp2[100005],dp[100005];
int main()
{
int ans=0,t=0x7f7f7f7f7f;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&A[i]);
}
dp1[0]=dp2[0]=1;
for(int i=1;i<n;i++)
{
int r1,r2;
if(A[i]<A[i-1])
{
dp1[i]=min(dp1[i-1]+1,dp2[i-1]+1);
dp2[i]=min(dp2[i-1],dp1[i-1]+1);
}
else if(A[i]>A[i-1])
{
dp1[i]=min(dp1[i-1],dp2[i-1]+1);
dp2[i]=min(dp2[i-1]+1,dp1[i-1]+1);
}
else
{
dp1[i]=dp1[i-1];
dp2[i]=dp2[i-1];
}
}
cout << min(dp2[n-1],dp1[n-1]) << endl;
return 0;
}
(祝各位C4打的开心,渣渣就继续补作业了)