下面是我自己写的代码,但是调试时发现数据输不入di[],ti[]中,求助各位大神该如何修改!(本来新人小小白...)
#include<stdio.h>
int n,l;//家庭数,公路长度int di[1000001],ti[1000001];//距离,人数
int num[1000001]={0};//记录每户人家的开销
int sum=99999999;//记录开销总和
int min=99999999;//记录最小开销
int book[4];//记录集会的位置
int ans;//公路中点
void jisuan()
{
if(sum>min) return;
else min=sum;
int i;
for(i=0;i<=book[0];i++)//第一个集合的左边或正处其上
num[i]=(book[0]-di[i])*ti[i];
for(i=book[0]+1;i<=book[1];i++)//第二个
num[i]=(book[1]-di[i])*ti[i];
for(i=book[1]+1;i<=book[2];i++)
num[i]=(book[2]-di[i])*ti[i];
for(i=book[2]+1;i<=book[3];i++)
num[i]=(book[3]-di[i])*ti[i];
for(int j=0;j<n;j++)
sum+=num[i];
return ;
}
void find()
{
for(int i=1;i<ans;i++)
for(int j=l-1;j>ans;j++)
{
book[0]=i;
book[2]=j;
jisuan();
}
}
int main()
{
scanf("%d %d",&n,&l);
book[3]=l;
for(int i=0;i<n;i++)
scanf("%d %d",&di[i],&ti[i]);
if(l%2==0)
{
book[1]=l/2;
ans=l/2;
}
else
{
book[1]=(l+1)/2;
ans=(l+1)/2;
}
find();
if(sum<min) min=sum;
printf("%d",min);
return 0;
}