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 ...
随机推荐
- 集成框架jar包的一些选择
我们往往在官网上下载了框架需要的jar却不知道该导入什么. required包里面的是必须导入的jar jar应该一切从简
- POJ 3692 Kindergarten (补图是二分图的最大团问题)
题意 幼稚园里有m个男孩和n个女孩(m.n范围都是[1,200]),男孩之间相互认识,女孩之间也相互认识,另外有部分男孩和女孩也认识.现在要举办一个活动,选取一些同学,要求所有选取的同学之间两两相互认 ...
- 关闭oom killer
最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统 ...
- unity3d 破解安装
1.下载破解程序,执行生成unity_v4.x.ulf文件 2.断网 3.执行unity客户端,load该lisence文件即可 注意:安装unity客户端完成后,未破解,切记别打开unity客户端
- Java中HashMap的数据结构
类声明: 概述: 线程不安全: <Key, Value>两者都可以为null: 不保证映射的顺序,特别是它不保证该顺序恒久不变: HashMap使用Iterator: HashMap中ha ...
- Android 开源项目DiskLruCache 详解
有兴趣的同学可以读完这篇文章以后 可以看看这个硬盘缓存和volley 或者是其他 图片缓存框架中使用的硬盘缓存有什么异同点. 讲道理的话,其实硬盘缓存这个模块并不难写,难就难在 你要考虑到百分之0.1 ...
- SQL Server数据类型与SDE库表sde_type对照表
SDE_column_registry 表管理所有注册列. 警告:如果使用 SQL 界面更改列定义,SDE_column_registry 表中的记录将不会更新.这可能导致之后的任何数据导出失败. S ...
- 阻塞、非阻塞的概念和select函数的阻塞功能
其它文档: http://www.cnitblog.com/zouzheng/archive/2010/11/25/71711.html (1)阻塞block 所谓阻塞方式block,顾名思义 ...
- Spring3 整合Quartz2 实现定时任务
一.Quartz简介 Quartz是一个由James House创立的开源项目,是一个功能强大的作业调度工具,可以计划的执行任务,定时.循环或在某一个时间来执行我们需要做的事,这可以给我们工作上带来很 ...
- VHDL之Port map and open
编SPI的master控制器,使用公司基本的元件,有些端口用不着,恰巧好二哥(不知年龄的数字组组长,本名Holger)来了,于是请教之,告曰open关键词.后来深感自己VHDL水平太水,下了一本电子书 ...