问题标题: 酷町堂:3657 懒惰的小鸟 只要思路

0
1
已解决
吴庞茂旭
吴庞茂旭
资深光能
资深光能

點我

同志們,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追加了内容

對了,是超時了。


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

这题用广搜好一点,因为1≤T≤50

0
0
我要回答