比赛 |
20090916练习赛 |
评测结果 |
AAAAAAATTT |
题目名称 |
任务安排 |
最终得分 |
70 |
用户昵称 |
Citron酱 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-09-21 21:26:10 |
显示代码纯文本
#include <fstream>
#include <climits>
#define I_F "batch.in"
#define O_F "batch.out"
const int MAXn=5000;
int n;
short s;
int *t, *f;
int ans;
int d[MAXn+1][MAXn+1];
void Input();
void Dynap();
void Output();
int main()
{
Input();
Dynap();
Output();
delete []t;
delete []f;
return 0;
}
void Input()
{
std::ifstream fin(I_F);
fin>>n>>s;
t=new int[n+1];
f=new int[n+1];
t[0]=f[0]=0;
for (int i=1; i<=n; i++)
{
fin>>t[i]>>f[i];
t[i]+=t[i-1];
f[i]+=f[i-1];
}
fin.close();
}
void Dynap()
{
// int **d=new int*[n+1];
// for (int i=0; i<=n; i++)
// d[0]=new int[n+1];
for (int i=0; i<=n; i++)
d[1][i]=(t[i]+s)*f[i];
ans=d[1][n];
for (int i=2; i<=n; i++)
{
d[i][0]=0;
for (int j=i; j<=n; j++)
{
d[i][j]=d[i-1][j];
for (int k=j; k>i; k--)
d[i][j]=(d[i][j]<d[i-1][k-1]+(t[j]+i*s)*(f[j]-f[k-1]))?d[i][j]:d[i-1][k-1]+(t[j]+i*s)*(f[j]-f[k-1]);
}
ans=(ans<d[i][n])?ans:d[i][n];
}
}
void Output()
{
std::ofstream fout(O_F);
fout<<ans<<std::endl;
fout.close();
}