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 ...
随机推荐
- JSF 与 struts2
http://suhuanzheng7784877.iteye.com/blog/1041411
- Codeforces Round 56-A. Dice Rolling(思维题)
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- Python大战机器学习——基础知识+前两章内容
一 矩阵求导 复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix. x is a column vector, A is a matrix d(A∗x)/dx=A d( ...
- docker postgresql FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
在docker中启动postgresql时出现错误 FATAL: could not access private key file "/etc/ssl/private/ssl-cert- ...
- docker mysql安装
Docker MySQL-Server 安装1.搜索docker search mysql# 一般会选择mysql-server 版本 2.拉取 docker pull mysql-server 3. ...
- 在 WPF 中的线程
线程处理使程序能够执行并发处理,以便它可以做多个操作一次.节省开发人员从线程处理困难的方式,设计了 WPF (窗口演示文稿基金会).这篇文章可以帮助理解线程在 WPF 中的正确用法. WPF 内部线程 ...
- JS类对象实现继续的几种方式
0. ES6可以直接使用class,extends来继承. 1. 原型继承 父类: function Persion(name,age){ this.name = name; this.age = ...
- IOC的使用
1.概要: 在spring中,都是使用反射机制创建对象,将创建对象的权利交给spring容器,就是控制反转(ioc) 对象创建方式 有参构造 无参构造 工厂模式(静态,非静态) 2.创建IDEA控制台 ...
- AJPFX关于ArrayList集合容器的操作
1.创建 ArrayList<Egg> myList=new ArrayList<Egg>(); //<Egg>代表创建出Egg类型的List,新的Arra ...
- 缓存List并写入文件持久化
LIfe is half spent before we know what is it. 缓存List并写入文件持久化 需要缓存一个List集合,比如缓存一个输入框中用户之前输入过的内容,下次当用户 ...