HDU-4848-Such Conquering
这题就是深搜加剪枝,有一个很明显的剪枝,因为题目中给出了一个deadline,所以我们一定要用这个deadline来进行剪枝。
题目的意思是求到达每个点的时间总和,当时把题看错了,卡了好久。
剪枝一:走到这个点的时间+再走到下一个点的时间>该点的死线
剪枝二:我们预测剪枝,因为我们要求的是总时间,所以我们每一步要走的点,都要被后面的点用上。我们每走一步的时间,后面点都要加上,因为它也走了。所以,就把后面的提前加上总时间,如果超出ans就返回。
#include <cstdio>
#include <cstring>
int map[35][35];
int vis[35], dead[35];
const int INF = 0x3f3f3f3f;
int n, ans;
int min(int x,int y)
{
return x < y ? x : y;
}
void dfs(int u,int cnt,int time,int total)
{
if (!cnt) {
ans = min(ans, total);
return;
}
for (int i = 2; i <= n;i++) {
if (!vis[i]&&time+map[u][i]>dead[i])
return;
}//走到这个点的时间+再走到到目标点的最短时间>死线
for (int i = 2; i <= n;i++) {
if (vis[i]||total+map[u][i]*cnt>=ans) {
continue;
}//这里假定我们走到下一个点的时间都是最短时间
vis[i] = 1;
dfs(i,cnt-1,time+map[u][i],total+cnt*map[u][i]);
vis[i] = 0;
}
}
void floyd()
{
for (int k = 1; k <= n;k++)
for (int i = 1; i <= n;i++)
for (int j = 1; j <= n;j++)
if (i!=j&&i!=k&&j!=k)
map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
}
int main()
{
while (scanf("%d",&n)!=EOF) {
for (int i = 1; i <= n;i++)
for (int j = 1; j <= n;j++)
scanf("%d", &map[i][j]);
for (int i = 2; i <= n;i++)
scanf("%d", &dead[i]);
floyd();
memset(vis,0,sizeof(vis));
vis[1] = 1;
ans = INF;
dfs(1, n-1, 0, 0);
printf("%d\n", ans == INF ? -1 : ans);
}
return 0;
}
HDU-4848-Such Conquering的更多相关文章
- hdu 4848 Wow! Such Conquering! (floyd dfs)
Wow! Such Conquering! Problem Description There are n Doge Planets in the Doge Space. The conqueror ...
- HDU 4848 - Wow! Such Conquering!
Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descriptio ...
- HDU 4848
http://acm.hdu.edu.cn/showproblem.php?pid=4848 题意:求遍历所有点的最小值(这个答案是加i点到起始点的距离,不是当前点到i的距离),必须在ti[i]前到达 ...
- hdu 4848 搜索+剪枝 2014西安邀请赛
http://acm.hdu.edu.cn/showproblem.php?pid=4848 比赛的时候我甚至没看这道题,事实上不难.... 可是说实话,如今对题意还是理解不太好...... 犯的错误 ...
- ACM 暴力搜索题 题目整理
UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...
- HDU4848 Wow! Such Conquering! —— dfs + 剪枝
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4848 题解: 一开始读错题目.以为每个点只能访问一遍.其实只要每个点都有被访问就可以了. 首先是用弗洛 ...
- HDU-4848 Wow! Such Conquering! 爆搜+剪枝
Wow! Such Conquering! 题意:一个n*n的数字格,Txy表示x到y的时间.最后一行n-1个数字代表分别到2-n的最晚时间,自己在1号点,求到达这些点的时间和的最少值,如果没有满足情 ...
- POJ 3653 & ZOJ 2935 & HDU 2722 Here We Go(relians) Again(最短路dijstra)
题目链接: PKU:http://poj.org/problem? id=3653 ZJU:problemId=1934" target="_blank">http ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
随机推荐
- 填坑帖 By cellur925
从今天到noip 记录下我犯的一切愚蠢错误. 7.17~7.19 把文件 注释掉了,输出语句放在了关文件之后 7.19 判断素数的板子 把%写成了& bool prime ...
- JPA @MappedSuperclass注解的使用说明(转)
(2011-11-07 11:37:30) 转载▼ http://blog.sina.com.cn/s/blog_7085382f0100uk4p.html 标签: 杂谈 基于代码复用和模型分离的 ...
- Unity 关于时间
一.引言 本篇博客 包括:unity中帧的耗时,时间缩放比例,常用日期时间的获取和计算,测试一段程序的耗时. 二.帧时间 名称 描述 Time.time (只读)表示从游戏开发到现在的时间,会随着游戏 ...
- RDL Web报表抛出ReportServerException,已取消该操作
::, RsBase() [ERROR] - Microsoft.Reporting.WebForms.ReportServerException: 已取消该操作. ---> System.Op ...
- Java编码优化
Java编码优化 1.尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变 量,如静态变量.实例变量等,都在堆中创建,速度较慢.另外,栈中创建的变量,随 着方 ...
- android应用开发全程实录-你有多熟悉listview?
今天给大家带来<android应用开发全程实录>中关于listview和adatper中的部分.包括listview的基本使用,listview的优化等. 我们经常会在应用程序中使用列表的 ...
- JAVA 框架之面向对象设计原则
面向对象设计原则: 单一职责原则 SRP : 一个类或者行为只做一件事 . 降低代码冗余,提高可重用性,可维护性,可扩展性,可读性 使用组合形式 里氏替换原则 LSP : 所有引用基类 ...
- 微信开发 config:invalid url domain
当遇到config:invalid url domain 有2种可能 1.没有配置url. 2.url配置错误.配置url如http://write.blog.csdn.NET/,就要这样配置writ ...
- MFC制作简单通讯录程序
学习c++和MFC一段时间了,苦于没有项目实战,所以自己写了一个简单的简单通讯录程序,以前用c#写简单很多,例程是这本书上的实例,我的第一个winform程序也是从这本书上学的,总结c#写的话更简单, ...
- 【extjs6学习笔记】Mastering Ext JS, 2nd Edition
我不知道在别人看来,我是什么样的人:但在我自己看来,我不过就象是一个在海滨玩耍的小孩,为不时发现比寻常更为光滑的一块卵石或比寻常更为美丽的一片贝壳而沾沾自喜,而对于展现在我面前的浩瀚的真理的海洋,却全 ...