用的dp,数组开大有些样例TLE,数组开小一点就能过,但又会导致其它样例RE,这是怎么回事呢 代码:
#include<bits/stdc++.h>
#define ll long long
#define maxn 1100000//开1000能过原来TLE的
#define INF 0x3f3f3f3f
using namespace std;
ll dp[maxn][3];
ll T,n;
char str[maxn];
ll maxm(ll p1,ll p2)
{
if(p1<p2)
return p2;
else
return p1;
}
int main()
{
scanf("%lld",&T);
for(int w=0;w<T;w++)
{
scanf("%d",&n);
memset(str,0,sizeof(str));
memset(dp,0,sizeof(dp));
scanf("%s",str);
dp[0][1]=1;
for(int i=1;i<n;i++)
{
dp[i][1]=maxm(dp[i-1][2]+1,dp[i][1]);
dp[i][2]=maxm(dp[i-2][1]+1,dp[i][2]);
if(str[i]!=str[i-1])
dp[i][1]=maxm(dp[i-1][1]+1,dp[i][1]);
if(i>=3&&str[i]!=str[i-2]||str[i-1]!=str[i-3])
dp[i][2]=maxm(dp[i-2][2]+1,dp[i][2]);
}
ll ans=maxm(dp[n-1][1],dp[n-2][2]);
printf("%lld\n",ans);
}
}