[題解]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個 ...
随机推荐
- ubuntu搭建nginx
1.下载nginx压缩包 2.上传.解压 tar -zxvf nginx-1.8.0.tar.gz cd nginx-1.8.0 3.安装 make install 4.启动,停止 ,重启 服务 可 ...
- extjs grid renderer参数用法
今天在导出EXT的二维时老是报错,追进去看是renderer : function(value)的参数不对,经过一番研究,未免以后遇到再次浪费时间,记录一下. var cm = new Ext.gri ...
- Android系统shell中的clear命令实现【转】
本文转载自:http://blog.csdn.net/morixinguan/article/details/73467845 之前一直不太清楚,当我们在shell命令行输入很多命令,会在屏幕上输出一 ...
- UVA10129 Play on Words —— 欧拉回路
题目链接:https://vjudge.net/problem/UVA-10129 代码如下: // UVa10129 Play on Words // Rujia Liu // 题意:输入n个单词, ...
- Protobuf入门实例
Protobuf是一个灵活.高效.结构化的数据序列化框架,相比于XML等传统的序列化工具, 它更小.更快.更简单.Protobuf支持数据结构化一次就可以到处使用,甚至是跨语言使用,通过代码生成工具可 ...
- ffmpeg 中av_rescale_rnd 的含义
http://blog.csdn.net/fireroll/article/details/8485482 一.函数声明: int64_t av_rescale_rnd(int64_t a, int6 ...
- <ZZ>linux yum命令详解
http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html yum(全称为 Yellow dog Updater, Modified)是 ...
- html5--3.14 lable元素和label属性
html5--3.14 lable元素和label属性 学习要点 掌握label元素的使用 掌握label属性的使用 lable元素 用来为 input 元素定义标注(标记),建立一个与之相关联的标签 ...
- hdu 1280 前m大的数(排序)
题意:排序 思路:排序 #include<iostream> #include<stdio.h> #include<algorithm> using namespa ...
- Watir RAutomation VS AutoIt to deal with popup
Watir使用过程中,经常遇到的弹出框分为几类: 1. Alert 2. Confirm 3. Prompt 4. File select Watir 处理弹出框,有很多方法,可以应用 AutoIt来 ...