您的位置:首页 > 其它

hdu 6103 暴力枚举+贪心

2017-08-10 19:13 435 查看
#include<bits/stdc++.h>
using namespace std;
const int maxn=5005;
typedef long long ll;
char s[maxn];
int main()
{
int t,m,i,j,ans,k,n;
scanf("%d",&t);
while(t--&&scanf("%d",&m)!=EOF)
{
scanf("%s",s);
n=strlen(s);
ans=0;
int l,r,sl,sr,len,sum;
for(i=1;i<n;i++)
{
sl=sr=l=r=i;
len=sum=0;
while(l>=0&&(r<n))
{
if(sum<=m)
{
ans=max(ans,len);
l--;
r++;
if(l<0||r>=n)
break;
sum+=abs(s[l]-s[r]);
len++;
}
else
{
while(l<sl&&sum>m)
{
sl--;
sr++;
sum-=abs(s[sl]-s[sr]);
len--;
}
}
}
}
for(i=1;i<n;i++)
{
sl=l=i;
sr=r=i-1;
len=sum=0;
while(l>=0&&(r<n))
{
if(sum<=m)
{
ans=max(ans,len);
l--;
r++;
if(l<0||r>=n)
break;
sum+=abs(s[l]-s[r]);
len++;
}
else
{
while(l<sl&&sum>m)
{
sl--;
sr++;
sum-=abs(s[sl]-s[sr]);
len--;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: