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 ...
随机推荐
- 在Centos中安装HustOJ实验记录
hustoj是目前使用最广泛的刷题平台,自建平台是编程教学中重要一环,教,学,测,反思形成闭合回路.目前利用现有的服务器资源,建成了开高开源code中心,一个刷题系统,六月再建一个私有云,私有云不仅是 ...
- Django (十一) 项目部署 2
阿里云项目部署 ( 如果xshell连接不上阿里云: 解决方法: 1, 在淘宝IP地址库查看当前IP: http://ip.taobao.com/ 2, 点击进入:安全(云盾) -> 安骑士(服 ...
- JS——变量声明、变量类型、命名规范
变量声明: JavaScript是一种弱类型语言,它的变量类型由它的值来决定,var是变量声明. 变量类型: 基本类型:number.string.boolean(布尔类型:var a=true/fa ...
- Hadoop实战项目:小文件合并
项目背景 在实际项目中,输入数据往往是由许多小文件组成,这里的小文件是指小于HDFS系统Block大小的文件(默认128M),早期的版本所定义的小文件是64M,这里的hadoop-2.2.0所定义的小 ...
- 使用MRUnit对MapReduce进行单元测试
1. 为什么需要单元测试 一旦MapReduce项目提交到集群之后,若是出现问题是很难定位和修改的,只能通过打印日志的方式进行筛选.又如果数据和项目较大时,修改起来则更加麻烦.所以,在将MapRedu ...
- [luogu 2634]聪聪可可
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
- 手动添加日期到mysql数据库
//获得jsp页面上的数据 String dates=request.getParameter("dates"); //使用预定格式将日期转换为字符串 SimpleDateForm ...
- Jquery使用ajax参数详解
记录一下 Jquery使用ajax(post.get及参数详解) 1.get: $.ajax({ type: "GET", url: baseUrl + "Showco ...
- 中介者模式和php实现
中介者模式: 中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介者模 ...
- python3 socke 服务端与客户端实现(回炉)
#服务端#!/usr/bin/env python3 # -*- coding:utf-8 -*- from socket import * # 创建socket tcpSerSocket = soc ...