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