急求一道关于C++问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 10:21:21
算法实验题3.5 服务转移问题
★问题描述
给定一条有向直线L以及L上的n+1 个点 x0 < x1 < … < xn。有向直线L上的每个点xi都
有一个权w(xi);每条有向边(xi, xi-1),也都有一个非负边长d(xi, xi-1)。有向直线L上的每个点
xi可以看作客户,其服务需求量为w(xi)。每条边(xi, xi-1)的边长,d(xi, xi-1)可以看作运输费用。
如果在点xi处未设置服务机构,则将点xi处的服务需求沿有向边转移到点xj处服务机构需
付出的服务转移费用为w(xi) * d(xi, xj)。在点x0处已设置了服务机构,现在要在直线L上增
设两处服务机构,使得整体服务转移费用最小。
★编程任务
对于给定的有向直线L,计算在直线L上增设两处服务机构的最小服务转移费用。
★数据输入
由文件input.txt提供输入数据。第一行有1个正整数n,表示有向直线L上除了点x0外
还有n个点x0 < x1 < … < xn。接下来有n行,其中第i行的2个整数分别表示w(xn-i+1)和d(xni+
1, xn-i)。
★数据输出
将程序运行结果输出到文件output.txt中。输出一行一个整数,表示最小服务转移费用。
输入文件示例输出文件示例
input.txt output.txt
9
1 2
2 1
3 3
1 1
3 2
1 6
2 1
1 2
1 1
26

我已经写得差不多了,谁能帮我改改.改对了200分给你..
文件如下:

#include<iostream.h>
#include<fstream.h>
#include<time.h>
typedef unsigned long hh;

void main()
{
clock_t start,finish;
start=clock();
ifstream infile("input.txt",ios::in);
ofstream outfile("output.txt",ios::out);
int n;
infile>>n;
int i=0,j=0;

hh *a=new hh[n];
hh *b=new hh[n];
for(i=0;i<n;i++)
{
infile>>a[n-1-i];
infile>>b[n-1-i];
}

hh **c=new hh*[n];
hh **cost=new hh*[n];

for(i=0;i<n;i++)
{
c[i]=new hh[n];
cost[i]=new hh[n];
}
int sum=0,v=0,p=0,s=0,u=0;
for(i=0;i<n;i++)
c[i][i]=b[i];
for(i=0;i<n;i++) //c[j][i]保存i点到j点的距离
{
for(j=i+1;j<n;j++)
{
c[j][i]=c[j-1][i]+b[j];
}

}
for(i=0;i<n;i++) //cost[j][i]保