比赛 |
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();
}