比赛 20111108 评测结果 AAAAAAAAAW
题目名称 机房 最终得分 90
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-08 10:45:09
显示代码纯文本
  1. #include <fstream>
  2. #include <climits>
  3.  
  4. #define I_F "orz.in"
  5. #define O_F "orz.out"
  6.  
  7. const int MAXn=2500+1;
  8.  
  9. int n,m;
  10. int s[MAXn]={0};
  11. int ans;
  12.  
  13. void Input();
  14. inline int Abs(const int);
  15. void Dynap();
  16. void Output();
  17.  
  18. int main()
  19. {
  20. Input();
  21. Dynap();
  22. Output();
  23. return 0;
  24. }
  25.  
  26. void Input()
  27. {
  28. int tn,t1,t2,t=1;
  29. std::ifstream fin(I_F);
  30. fin>>tn>>m>>t1;
  31. s[1]=1;
  32. n=1;
  33. for (int i=1; i<tn; i++)
  34. {
  35. fin>>t2;
  36. if (t2!=t1)
  37. {
  38. t*=-1;
  39. n++;
  40. t1=t2;
  41. }
  42. s[n]+=t;
  43. }
  44. fin.close();
  45. for (int i=1; i<=n; i++)
  46. s[i]+=s[i-1];
  47. }
  48.  
  49. inline int Abs(const int x)
  50. {
  51. return (x<0)?-x:x;
  52. }
  53.  
  54. void Dynap()
  55. {
  56. int f[MAXn];
  57. for (int i=1; i<=n; f[i++]=INT_MAX-5);
  58. f[0]=0;
  59. for (int i=1; i<=n; i++)
  60. for (int j=i-1; (j>=0); j--)
  61. f[i]=(((j==i-1)?0:Abs(s[i]-s[j]))<=m)?((f[i]<(f[j]+1))?f[i]:(f[j]+1)):f[i];
  62. ans=f[n];
  63. }
  64.  
  65. void Output()
  66. {
  67. std::ofstream fout(O_F);
  68. fout<<ans<<std::endl;
  69. fout.close();
  70. }