HDU 2437 Jerboas (剪枝搜索)
题意:给定一幅图,图上有两种点T,P.......一只跳鼠在一个T点作为起始点,它想通过图上的路到达某个P点,P点满足如下要求:
(1).到达P点的途中路径权值为k的倍数
(2).尽量让路径权值取最小
(3).权值相同时,P点取更小的
此题一波三折,一开始反向建图,以为记忆化搜索能过.....TLE了,以为是枚举了是P的点浪费了时间;然后正向建图,从起点开始,也是TLE了,然后发现此题记忆化搜索影响不大,于是剪枝 v < vis[e][v % k] 的值才能继续搜索........剪枝完秒过,看来是卡剪枝的题目.......
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstring>
# define MAX 1111
# define INF 0x7FFFFFFF
using namespace std;
char a[MAX];
struct node {
int s,e,v,next;
} ed[22222];
int head[MAX],num = 0,n,m,k,st;
int dp[MAX],vis[MAX][MAX]; //利用整数倍关系,剪枝 void add(int s,int e,int v) {
ed[num].s = s;
ed[num].e = e;
ed[num].v = v;
ed[num].next = head[s];
head[s] = num++;
} void init() {
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
num = 0;
} int dfs(int v0,int u0,int cur) {
if(a[v0 - 1] == 'P' && cur % k == 0) return dp[v0] = min(dp[v0],cur);
if(dp[v0] != INF) return dp[v0];
for(int i = head[v0]; i != -1; i = ed[i].next) {
int e = ed[i].e;
int v = ed[i].v + cur;
if(vis[e][v%k] == 0 || v < vis[e][v % k]) {
vis[e][v%k] = v;
dfs(e,u0,v); }
}
} int main() {
int T;
cin >> T;
int casee = 1;
while(T --) {
init(); cin >> n >> m >> st >> k;
for(int i=1; i<=n; i++)
dp[i] = INF; getchar();
int aa,bb,cc;
scanf("%s",a);
for(int i=1; i<=m; i++) {
scanf("%d%d%d",&aa,&bb,&cc);
add(aa,bb,cc);
}
printf("Case %d: ",casee++);
dfs(st,st,0);
int flag = 0,ind,ans = INF;
for(int i=1; i<=n; i++) {
if(dp[i] != INF) {
flag = 1;
if(ans > dp[i]) {
ans = dp[i];
ind = i;
}
}
}
if(flag) printf("%d %d\n",ans,ind);
else printf("-1 -1\n");
}
return 0;
}
HDU 2437 Jerboas (剪枝搜索)的更多相关文章
- poj 1416 (hdu 1539)Shredding Company:剪枝搜索
点击打开链接 题目大意是有一个分割机,可以把一串数字分割成若干个数字之后求和,题目输入一个数字上界和待分割的数字,让我们求出分割后数字之和在不超过给定max的情况下的最大值,并且给出分割方案,如果没有 ...
- HDU 4620 Fruit Ninja Extreme(2013多校第二场 剪枝搜索)
这题官方结题报告一直在强调不难,只要注意剪枝就行. 这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了 #include &l ...
- HDU 5113--Black And White(搜索+剪枝)
题目链接 Problem Description In mathematics, the four color theorem, or the four color map theorem, stat ...
- hdu 1010(迷宫搜索,奇偶剪枝)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Ja ...
- poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)
Sum It Up Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Sub ...
- alpha-beta剪枝搜索
•一种基于剪枝( α-βcut-off)的深度优先搜索(depth-first search). •将走棋方定为MAX方,因为它选择着法时总是对其子节点的评估值取极大值,即选择对自己最为有利的着法: ...
- HDU 4616 Game (搜索)、(树形dp)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 4090--GemAnd Prince(搜索)
题目链接 Problem Description Nowadays princess Claire wants one more guard and posts the ads throughout ...
随机推荐
- Wireshark基本介绍和学习TCP三次握手(转)
http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS. 这篇 ...
- 【英语】Bingo口语笔记(15) - Give系列
- HDFS的基本概念
转:http://www.cnblogs.com/forfuture1978/archive/2010/03/14/1685351.html
- yeoman bower grunt等安装
grunt-beginner前端自动化工具:http://www.imooc.com/learn/30 grunt的安装 官方站点:http://gruntjs.com/ 安装指令: sudo npm ...
- RequireJS进阶(二) 转
这一篇来认识下打包工具的paths参数,在入门一中就介绍了require.config方法的paths参数.用来配置jquery模块的文件名(jQuery作为AMD模块时id为“jquery”,但文件 ...
- Cannot run program "/home/mohemi/Program/adt-bundle-linux-x86_64-20130729/sdk//tools/emulator": error=2, 没有那个文件或目录
在64位的Ubuntu下,安装ADT64位的,打开android模拟器出现以下报错: Starting emulator for AVD 'Android' Failed to start emula ...
- The Network Adapter could not establish the connection解决办法
用 oracle net manager 将监听改为IP地址,将服务命名也改为IP地址,然后数据库连接改为IP地址方式不要用localhost
- 嵌入式 hi3518平台获取网关
</pre><pre code_snippet_id="495447" snippet_file_name="blog_20141024_1_70650 ...
- android面试题(转)
1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚 ...
- Delphi 串口通信数据位长度对传输数据的影响 转
针对串口通信,关于设置数据位长度对通信的影响,如图: 在串口数据通信中,会看到串口参数设置.其中“数据位”设置,共有四档选项,分别是8.7.6.5.那么改变这个参数会对数据的传输有什么影响呢? 我 ...