[題解]TYVJ_2032(搜索/最短路)
搜索:https://www.cnblogs.com/SiriusRen/p/6532506.html?tdsourcetag=s_pctim_aiomsg 來自 SiriusRen
數據範圍小,考慮直接dfs,剪枝:到達此層如果用時更長就不再搜了,
然而我有一個問題就是到達每層手柄的狀態並不一樣,怎麼能直接更新呢?
然而我用二維的寫掛了,T5個點,所以先放上一維的掛著了......
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,c[],ans=0x7fffffff,p;
int time[];
int abs(int a){return a<?-a:a;}
void dfs(int fl,int t,int pos)
{
if(fl==n)ans=min(ans,t);
for(int i=;i<=m;i++){
int x=fl+c[i];if(x<= || x>n)continue;
int tt=t+abs(pos-i)+*abs(c[i]);
if(time[x]<=tt)continue;
time[x]=tt;
dfs(x,tt,i);
}
}
int main()
{
memset(time,0x3f,sizeof(time));
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d",&c[i]);if(c[i]==)p=i;
}
for(int i=;i<=n;i++)time[i]=0x7fffffff;
dfs(,,p);
if(ans!=0x7fffffff)
printf("%d",ans);
else printf("-1");
}
如果考慮最短路,可以跑一次spfa,在隊列裡維護當前樓層和手柄位置,其實相當於廣搜,掛了層最短路的皮而已
然而我考試時竟然最後更新ans時寫的 for(1...m)ans=min(ans,d[n][m]).............狗屎
別忘了判-1......
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#define mp make_pair
using namespace std;
const int maxn=;
queue<pair<int,int> >q;
int n,m,pos;
int c[];
int d[maxn][],v[maxn][];
int main()
{
freopen("up.in","r",stdin);
freopen("up.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d",&c[i]);if(c[i]==)pos=i;
}
memset(d,0x3f,sizeof(d));
q.push(mp(,pos));
v[][pos]=;d[][pos]=;
while(!q.empty()){
int x=q.front().first,y=q.front().second;q.pop();
v[x][y]=;
for(int i=;i<=m;i++){
int yy=x+c[i],dd=(abs(i-y)+*abs(c[i]));
if(yy<= || yy>n)continue;
if(d[yy][i]>d[x][y]+dd){
d[yy][i]=d[x][y]+dd;
if(!v[yy][i])q.push(mp(yy,i)),v[yy][i]=;
}
}
}
int ans=0x3f3f3f3f;
for(int i=;i<=m;i++)
ans=min(ans,d[n][i]);
if(ans!=0x3f3f3f3f)
printf("%d",ans);
else printf("-1"); fclose(stdin);fclose(stdout);
}
[題解]TYVJ_2032(搜索/最短路)的更多相关文章
- [題解](搜索)生日蛋糕(NOI1999)
搜索剪枝, 1.枚舉上下界: 先$R\subset$$(dep,min(\lfloor\sqrt{n-v}\rfloor,lastr-1))$ 后$H\subset$$(dep,min((n-v)/R ...
- [題解]luogu_P1120小木棍(搜索)
好久以前抄的題解,現在重新抄題解做一下 1.對所有木棍從大到小排序,後用小的比較靈活 2.限制加入的木棍單調遞減,因為先/后用長/短木棍等價,反正就是那兩根 3.預處理出重複木棍的位置,防止重複搜索相 ...
- [題解](最短路)luogu_P1119災後重建
一道好題,然而看題解做的...... floyed的實質:只經過前k個點i到j的最短路,原狀態轉移方程為 f [ k ] [ i ] [ j ]=min( f[ k-1 ] [ i ] [ j ],f ...
- [題解](水/數學)luogu_P1147連續自然數和
尺取法a掉 然而數學解法為 等差數列求和公式: sum(L,R)=(L+R)(R-L+1)/2=M 即(L+R)(R-L+1)=2M 可以把2M分解成两个数之积,假设分成了两个数K1,K2,且K1&l ...
- [題解](單調隊列dp)【2016noip福建夏令營】探險
P1917 -- 探险 时间限制:1000MS 内存限制:131072KB 题目描述(explore.cpp) π+e去遗迹探险,遗迹里有 N 个宝箱,有的装满了珠宝,有的装着废品. π+e ...
- [題解](最小生成樹/LCA)luogu_P1967貨車運輸
一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑 ...
- [題解](最小生成樹)luogu_P1265
首先考虑最小生成树的模型,唯一不同的是第二种情形. 即“三个或三个以上的城市申请修建的公路成环” 考虑该情形,因为修路的申请是申请离它最近的城市,所以上述条件实质上为 “存在三个或三个以上的城市,他们 ...
- [題解](二分答案/單調隊列)luogu_P1419尋找段落
果然又抄的題解... 顯然答案具有單調性,而對于平均數計算的式子我們移一下項, 若s[l..r]>mid*(r-l+1)无解, 於是我們把每個數都減去一個mid,看和的正負即可,如果為正就可能有 ...
- [題解]luogu_P1854 花店櫥窗佈置
來源:題解 一開始看不懂題目,一萬年了終於看懂 f [ i ] [ j ] 表示第i朵花放在第j個花瓶中最大美學值,(花是必須用完嗎?) 顯然放i-1朵花至少要放到前i-1個瓶子里,最多放到前j-1個 ...
随机推荐
- Linux下Redis C++操作的封装
安装和启动Redis服务...略!很粗糙的版本,待改进... Redis Client C++示例代码...略! /** * Time: 14-3-10 * File: RedisCache.h * ...
- html标签默认属性值之margin;padding值
一.h1~h6标签:有默认margin(top,bottom且相同)值,没有默认padding值. 在chrome中:16,15,14,16,17,19; 在firefox中:16,15,14,16, ...
- UUID 和 GUID 的区别(转)
UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长.比如:550e8400-e29b-41d4-a716-446655440000 http://gohands ...
- 【Spring MVC】 - @ModelAttribute使用
@ModelAttribute一个具有如下三个作用: ①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑 定流程,而且自动暴露为模型数据用于视图页面 ...
- Pyhton:汉诺塔游戏
#汉诺塔游戏攻略! def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) #将前n-1个盘子从x移动到y上 ...
- 转,如果linux不能用yum安装asterisk时,可以库参照以下办法添加asterisk仓库
LinuxCentOSRedHat Installing a binary distribution of Asterisk makes it easier to maintain your syst ...
- 截图工具,更改系统默认快捷键,系统配置实用程序,以管理员身份运行cmd(win7)
截图工具: 开始--附件--右键发送到桌面快捷方式---桌面截图工具右键属性--快捷方式 更改系统默认快捷键: 控制面板--外观和个性化--调整屏幕分辨率--高级设置---英特尔图形和媒体控制面板-- ...
- C语言解释器的实现--存储结构(一)
目录: 1. 内存池 2. 栈 3. Hash表 1.内存池 在一些小的程序里,没什么必要添加内存管理模块在里面.但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的.至 ...
- bzoj 2179 FFT快速傅立叶 —— FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2179 默写板子,注释的是忘记的地方. 代码如下: #include<iostream& ...
- json数组对象和对象数组 ---OK
一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第 ...