0
已解决
吴庞茂旭
资深光能
资深光能
同志們,3657這一道題真是……難啊啊啊啊啊啊啊啊啊!
這是我的超時代碼,有沒有什麼建設性意見?
//exam_3657
#include <iostream>
#include <cstring>
#include <cstdio>
#define INF 0x3f3f3f3f
using namespace std;
const int dir[5][2]={{0},{0,1},{-1,0},{0,-1},{1,0}};
int x1,y1,x2,y2;
int wind[55];
int t;
int mina=INF;
int dfs(int x,int y,int time,int cnt){
if(time==t)return INF;
if(cnt>=mina)return INF;//剪枝
if(x<=0||y<=0)return INF;
if(x==x2&&y==y2){
mina=min(mina,cnt);
return mina;
}
if(time==t)return INF;
int dx=x+dir[wind[time]][0],dy=y+dir[wind[time]][1];
return min(dfs(dx,dy,time+1,cnt+1),dfs(x,y,time+1,cnt));
}
char c;
int ans;
int main(){
cin>>x1>>y1>>x2>>y2;
cin>>t;
for(int i=1;i<=t;i++){
cin>>c;
if(c=='E')wind[i]=1;
else if(c=='S')wind[i]=2;
else if(c=='W')wind[i]=3;
else wind[i]=4;
}
ans=dfs(x1,y1,1,0);
if(ans==INF)cout<<-1;
else cout<<ans;
return 0;
}
只要思路!!!!
對了,繁體字我用慣了,懶得換了,自己品吧。
吴庞茂旭在2021-01-23 21:08:08追加了内容
對了,是超時了。