比赛 |
20111108 |
评测结果 |
AAAAAAAAAW |
题目名称 |
机房 |
最终得分 |
90 |
用户昵称 |
Citron酱 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-11-08 10:45:09 |
显示代码纯文本
- #include <fstream>
- #include <climits>
-
- #define I_F "orz.in"
- #define O_F "orz.out"
-
- const int MAXn=2500+1;
-
- int n,m;
- int s[MAXn]={0};
- int ans;
-
- void Input();
- inline int Abs(const int);
- void Dynap();
- void Output();
-
- int main()
- {
- Input();
- Dynap();
- Output();
- return 0;
- }
-
- void Input()
- {
- int tn,t1,t2,t=1;
- std::ifstream fin(I_F);
- fin>>tn>>m>>t1;
- s[1]=1;
- n=1;
- for (int i=1; i<tn; i++)
- {
- fin>>t2;
- if (t2!=t1)
- {
- t*=-1;
- n++;
- t1=t2;
- }
- s[n]+=t;
- }
- fin.close();
-
- for (int i=1; i<=n; i++)
- s[i]+=s[i-1];
- }
-
- inline int Abs(const int x)
- {
- return (x<0)?-x:x;
- }
-
- void Dynap()
- {
- int f[MAXn];
- for (int i=1; i<=n; f[i++]=INT_MAX-5);
- f[0]=0;
-
- for (int i=1; i<=n; i++)
- for (int j=i-1; (j>=0); j--)
- f[i]=(((j==i-1)?0:Abs(s[i]-s[j]))<=m)?((f[i]<(f[j]+1))?f[i]:(f[j]+1)):f[i];
- ans=f[n];
- }
-
- void Output()
- {
- std::ofstream fout(O_F);
- fout<<ans<<std::endl;
- fout.close();
- }