改变常数对结果的影响
查看原帖
改变常数对结果的影响
1196460
lawhello楼主2024/8/4 22:36

用的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);
    }
}
2024/8/4 22:36
加载中...