第六届蓝桥杯决赛 C语言B组 题解 第五题_居民集会
2017-05-19 10:36
357 查看
标题:居民集会
蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距离为di。
每年,蓝桥村都要举行一次集会。今年,由于村里的人口太多,村委会决定要在4个地方举行集会,其中3个位于公路中间,1个位最公路的终点。
已知每户家庭都会向着远离公路起点的方向去参加集会,参加集会的路程开销为家庭内的人数ti与距离的乘积。
给定每户家庭的位置di和人数ti,请为村委会寻找最好的集会举办地:p1, p2, p3, p4 (p1<=p2<=p3<=p4=L),使得村内所有人的路程开销和最小。
【输入格式】
输入的第一行包含两个整数n, L,分别表示蓝桥村的家庭数和公路长度。
接下来n行,每行两个整数di, ti,分别表示第i户家庭距离公路起点的距离和家庭中的人数。
【输出格式】
输出一行,包含一个整数,表示村内所有人路程的开销和。
【样例输入】
6 10
1 3
2 2
4 5
5 20
6 5
8 7
【样例输出】
18
【样例说明】
在距起点2, 5, 8, 10这4个地方集会,6个家庭需要的走的距离分别为1, 0, 1, 0, 2, 0,总的路程开销为1*3+0*2+1*5+0*20+2*5+0*7=18。
【数据规模与约定】
对于10%的评测数据,1<=n<=300。
对于30%的评测数据,1<=n<=2000,1<=L<=10000,0<=di<=L,di<=di+1,0<=ti<=20。
对于100%的评测数据,1<=n<=100000,1<=L<=1000000,0<=di<=L,di<=di+1,0<=ti<=1000000。
资源约定:
峰值内存消耗 < 512M
CPU消耗 < 5000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
其实很简单深度搜索,就是选三个点在人家的村落然后再来算。
蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距离为di。
每年,蓝桥村都要举行一次集会。今年,由于村里的人口太多,村委会决定要在4个地方举行集会,其中3个位于公路中间,1个位最公路的终点。
已知每户家庭都会向着远离公路起点的方向去参加集会,参加集会的路程开销为家庭内的人数ti与距离的乘积。
给定每户家庭的位置di和人数ti,请为村委会寻找最好的集会举办地:p1, p2, p3, p4 (p1<=p2<=p3<=p4=L),使得村内所有人的路程开销和最小。
【输入格式】
输入的第一行包含两个整数n, L,分别表示蓝桥村的家庭数和公路长度。
接下来n行,每行两个整数di, ti,分别表示第i户家庭距离公路起点的距离和家庭中的人数。
【输出格式】
输出一行,包含一个整数,表示村内所有人路程的开销和。
【样例输入】
6 10
1 3
2 2
4 5
5 20
6 5
8 7
【样例输出】
18
【样例说明】
在距起点2, 5, 8, 10这4个地方集会,6个家庭需要的走的距离分别为1, 0, 1, 0, 2, 0,总的路程开销为1*3+0*2+1*5+0*20+2*5+0*7=18。
【数据规模与约定】
对于10%的评测数据,1<=n<=300。
对于30%的评测数据,1<=n<=2000,1<=L<=10000,0<=di<=L,di<=di+1,0<=ti<=20。
对于100%的评测数据,1<=n<=100000,1<=L<=1000000,0<=di<=L,di<=di+1,0<=ti<=1000000。
资源约定:
峰值内存消耗 < 512M
CPU消耗 < 5000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
其实很简单深度搜索,就是选三个点在人家的村落然后再来算。
#include<iostream> using namespace std; int n,m,data[100][3],sum,ans[5]; void cal(){ int i,j,a=1,b,c,d,e,f=0; for(i=1;i<=n;i++){ if(data[ans[a]][1]>=data[i][1]){ if(a==4) f=f+(m-data[i][1])*data[i][2]; else f=f+(data[ans[a]][1]-data[i][1])*data[i][2]; } else { a++; if(a<=3){ if(data[ans[a]][1]>=data[i][1]) f=f+(data[ans[a]][1]-data[i][1])*data[i][2]; } else if(a==4) f=f+(m-data[i][1])*data[i][2]; else if(a>4) return ; } } if(sum>f){ sum=f; } } void dfs(int step,int start){ int i,j; if(step==1) for(i=start;i<=n-2;i++){ ans[step]=i; dfs(step+1,i+1); } else if(step==2) for(i=start;i<=n-1;i++){ ans[step]=i; dfs(step+1,i+1); } else if(step==3) for(i=start;i<=n;i++){ ans[step]=i; dfs(step+1,i+1); } else if(step==4){ cal(); } } int main(){ int i,j,a,b,c,d,e,f=0; cin>>n>>m; ans[4]=m; sum=100000000; for(i=1;i<=n;i++) cin>>data[i][1]>>data[i][2]; dfs(1,1); cout<<sum<<endl; return 0; }
相关文章推荐
- 第七届蓝桥杯决赛 C语言B组 题解 第五题_广场舞
- 第六届蓝桥杯决赛 C语言A组 题解 第四题_穿越雷区
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 居民集会(编程大题)
- 居民集会 第六届蓝翔杯决赛题
- 【DFS回溯】(2015)第六届蓝桥杯省赛 C/C++ A组 题解(第五题)
- 居民集会--第六届蓝桥杯国赛JAVA C组第六题
- 蓝桥杯 表格计算 2016年第六届蓝桥杯javaB组决赛第五题
- 【2015年第六届蓝桥杯C/C++程序设计本科B组决赛 居民集会(编程大题) 】
- 穿越雷区第六届蓝桥杯大赛个人赛决赛(C语言A组)第四题
- 蓝桥杯—C语言B组 第七届决赛题解:机器人塔
- 关联账户 第六届蓝桥杯大赛个人赛决赛(C语言B组)第三题
- ( 题解 )第六届蓝桥杯决赛试题 -- 完美正方形 (线段树 + 深搜)
- 显示二叉树 第六届蓝桥杯大赛个人赛决赛(C语言A组)第三题
- 2015第六届蓝桥杯B组C/C++决赛题解【2.5.6待解><】
- 2015年第六届蓝桥杯大赛个人赛决赛(软件类)真题 标题:方格填数
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛(离官方最近的题解)
- 蓝桥杯_第三届_决赛_C语言高职组_2
- 第六届蓝桥杯决赛试题-机器人繁殖
- 蓝桥杯2015年第六届决赛C_C++程序设计本科B组(1. 积分之迷)
- 第六届蓝桥杯决赛真题 04 穿越雷区(dfs || bfs)