蓝桥杯-居民集合---求解惑



下面是我自己写的代码,但是调试时发现数据输不入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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值