题意:有一个人要从1点出发把所有点遍历一遍并且最后能回到1点,其中每隔d距离就要加一次油,现在我们在各个点设一些加油站(1点必须设),且每隔点建加油站的费用最小为2^(i-1),求满足条件下的最小花费。

分析:思考了半天也不知道按照什么顺序来搜索,现给出大神思路:

突破口在于在i号点建立加油站的费用为2^(i-1),这样特殊的花费会使得我们有一个贪心的规律,就是尽量不在号比较大的点建加油站,如果在n号点建立加油站的费用会大于在除n以外的所有点都建加油站的总费用。所以我们可以先尝试把除n以外的所有点建立加油站,观察是否满足要求。若满足则说明我们必然不会在n点建立加油站,若不满足我们就一定要在n点建加油站。然后就不用再考虑n点了,在确定了n点之后,我们用同样的方法来观察n-1号点是否需要建立加油站,即将1~n-2号点都建立加油站,观察是否满足要求。以此类推,可以推出所有点的情况。

接下来我们需要解决是否满足要求的问题了。分为两部判断,1.判断所有加油站是否可达(从1号点开始广搜,若到当前点距离<=d则入队)。2.判断其余点是否可达(刚才的广搜过程可以顺便标出每个点到最近的加油站的距离,要求能从加油站到该点并返回加油站,所以点到加油站的距离必须小于等于d/2)。若满足这两点必然符合要求,否则不符合要求。满足要求的话,该点无需建立加油站了。

Orz..................................................................................Orz

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 100005
#define INF 0x7FFFFFFF
#define REP(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define L(x) x<<1
#define R(x) x<<1|1
# define eps 1e-5
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;int dis[130][130];
int vis[130],x[130],y[130],build[130];
int n,D,flag;
int q[222];
int head,tail;
int getdis(int x1,int y1,int x2,int y2) {double a1 = x1 * 1.0; double b1 = y1 * 1.0;double a2 = x2 * 1.0; double b2 = y2 * 1.0;double s = sqrt((a1-a2)*(a1-a2) + (b1-b2)*(b1-b2));return ceil(s);
}void init() {memset(build,0,sizeof(build));
}int bfs(int v0) { // 判断除去v0点,其他点能否符合要求head = 0;tail = 0;memset(vis,0,sizeof(vis));int cnt = 1; //点v0q[head++] = 1;vis[1] = 1;while(head != tail) {int t = q[tail++];for(int i=1; i<=n; i++) {if(vis[i] == 0) {if(dis[t][i] <= D && (build[i] || i < v0)) {q[head++] = i;vis[i] = 1;cnt ++;} else {if(dis[t][i] <= D/2) {vis[i] = 1;cnt ++;}}if(cnt == n) return 1;}}}return 0;
}int main(){while(scanf("%d%d",&n,&D) != EOF) {init();for(int i=1; i<=n; i++) {scanf("%d%d",&x[i],&y[i]);}for(int i=1; i<=n; i++) {for(int j=1; j<=n; j++) {dis[i][j] = getdis(x[i],y[i],x[j],y[j]);}}if(bfs(n+1) == 0) { //自己加一个点,则如果已有的n的点不满足要求printf("-1\n");continue;}for(int i=n; i>1; i--) {if(bfs(i) == 0) { //i-1个点不满足要求,i点必然要建build[i] = 1;}}int ok = 0;for(int i=n; i>1; i--) {if(build[i] == 1 || ok) {printf("%d",build[i]);ok = 1;}}printf("1\n");}return 0;
}

HDU 4435 charge-station (搜索+YY)相关推荐

  1. HDU 2448 Mining Station on the Sea(Floyd+最优匹配)

    HDU 2448 Mining Station on the Sea(Floyd+最优匹配) http://acm.hdu.edu.cn/showproblem.php?pid=2448 题意: 给你 ...

  2. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...

  3. hdu 5424(dfs搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5424 官方题解: 如果图是联通的,可以发现如果存在哈密顿路径,一定有一条哈密顿路径的一端是度数最小的点 ...

  4. hdu 1142 记忆化搜索

    题目是这样的,貌似一开始我这个英语搓的人还理解错了...orz http://acm.hdu.edu.cn/showproblem.php?pid=1142 就是最短路,只不过用dijkstra是从终 ...

  5. hdu 3879 Base Station 最大权闭合图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...

  6. HDU - 胜利大逃亡(搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 Time Limit: 4000/2000 MS (Java/Others) Memory Li ...

  7. Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4090 题目大意:给定一个n*m,矩阵上每个点都有一个数字,数字范围是1到k,某个数字相同的连通块如果 ...

  8. HDU 5438 Ponds (搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 题面: Ponds Time Limit: 1500/1000 MS (Java/Others) ...

  9. HDU 2448 Mining Station on the Sea

    预处理轮船到各个港口的最短路径,然后KM解之即可. /*HDU 2448*/ #include <iostream> #include <cstdlib> #include & ...

最新文章

  1. SAP RETAIL商品主数据Basic Data视图里几个让人莫名惊诧的字段
  2. weibo4j中的 jar解释
  3. 要成为年薪五十万的数据分析师,除了技术还需要什么?
  4. WCDMA的短消息业务协议分析
  5. vue 地图使用navigator_weex踩坑之旅第五弹 ~ 使用navigator内置模块实现导航
  6. gulp + webpack + sass 学习
  7. 使用Python Seaborn和Pandas进行数据可视化
  8. 蜻蜓安全编写插件模块 webcrack 实践
  9. 创建 shell 脚本文件
  10. 【Luogu P1878】舞蹈课
  11. 公众号和订阅号的区别
  12. 【泛融顾问分享】互联网金融未来走向预测
  13. Qt实现QQ截图中的马赛克效果
  14. r5 7530u和r7 5825u差距 r57530u和r75825u对比
  15. 《2022,自我增值的7个好习惯》读书笔记
  16. 0xbc指令 st75256_st75256 - 涂Sir的个人空间 - OSCHINA - 中文开源技术交流社区
  17. Mac苹果电脑 安装virtualBox
  18. shiro使用Md5加密
  19. 【数据库系统概念第七版(Database System Concepts 7th)配套SQL文件如何获取】
  20. FPGA基础学习 -- 内部结构之CLB

热门文章

  1. win10右键没有新建笔记本
  2. 2370 小机房的树
  3. html5多媒体事件写法,多媒体元素重要事件 -HTML5
  4. Tapestry介绍
  5. 《寒江独钓》内核学习笔记(1)-- IRP - .Little Hann
  6. 无线打印机服务器属性,为什么我的打印机能在打印机
  7. AI背景下的新零售行业商业模式
  8. outlook技巧-常用email账号设置
  9. mysql 三门课程平均分_平均分
  10. 攻防世界 reverse leaked-license-64