当前位置:   article > 正文

hdu 6103 暴力枚举+贪心_简单实现

简单实现
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=5005;
  4. typedef long long ll;
  5. char s[maxn];
  6. int main()
  7. {
  8. int t,m,i,j,ans,k,n;
  9. scanf("%d",&t);
  10. while(t--&&scanf("%d",&m)!=EOF)
  11. {
  12. scanf("%s",s);
  13. n=strlen(s);
  14. ans=0;
  15. int l,r,sl,sr,len,sum;
  16. for(i=1;i<n;i++)
  17. {
  18. sl=sr=l=r=i;
  19. len=sum=0;
  20. while(l>=0&&(r<n))
  21. {
  22. if(sum<=m)
  23. {
  24. ans=max(ans,len);
  25. l--;
  26. r++;
  27. if(l<0||r>=n)
  28. break;
  29. sum+=abs(s[l]-s[r]);
  30. len++;
  31. }
  32. else
  33. {
  34. while(l<sl&&sum>m)
  35. {
  36. sl--;
  37. sr++;
  38. sum-=abs(s[sl]-s[sr]);
  39. len--;
  40. }
  41. }
  42. }
  43. }
  44. for(i=1;i<n;i++)
  45. {
  46. sl=l=i;
  47. sr=r=i-1;
  48. len=sum=0;
  49. while(l>=0&&(r<n))
  50. {
  51. if(sum<=m)
  52. {
  53. ans=max(ans,len);
  54. l--;
  55. r++;
  56. if(l<0||r>=n)
  57. break;
  58. sum+=abs(s[l]-s[r]);
  59. len++;
  60. }
  61. else
  62. {
  63. while(l<sl&&sum>m)
  64. {
  65. sl--;
  66. sr++;
  67. sum-=abs(s[sl]-s[sr]);
  68. len--;
  69. }
  70. }
  71. }
  72. }
  73. printf("%d\n",ans);
  74. }
  75. return 0;
  76. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/900009
推荐阅读
相关标签
  

闽ICP备14008679号