社区讨论
记忆化搜索40分求助
P1095[NOIP 2007 普及组] 守望者的逃离参与者 1已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj38udb
- 此快照首次捕获于
- 2025/11/03 20:00 4 个月前
- 此快照最后确认于
- 2025/11/03 20:00 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int m,s,t,t2=2147483647,dis;
bool yes=false;
map<int,map<int,map<int,bool> > > flag;
void mem_dfs(int m1,int s1,int t1){
if(t1==0){
dis=max(dis,s-s1);
}
if(t1<0){
return;
}
if(s1<=0){
t2=min(t2,t-t1);
yes=1;
}
if(m1>=10){
if(!flag[m1-10][s1-60][t1-1]){
flag[m1-10][s1-60][t1-1]=1;
mem_dfs(m1-10,s1-60,t1-1);
}
}
if(!flag[m1+4][s1][t1-1]){
flag[m1+4][s1][t1-1]=1;
mem_dfs(m1+4,s1,t1-1);
}
if(!flag[m1][s1-17][t1-1]){
flag[m1][s1-17][t1-1]=1;
mem_dfs(m1,s1-17,t1-1);
}
}
signed main(){
cin>>m>>s>>t;
mem_dfs(m,s,t);
if(yes) cout<<"Yes"<<"\n"<<t2;
else cout<<"No"<<"\n"<<dis;
return 0;
}
亲测两个样例都对
回复
共 2 条回复,欢迎继续交流。
正在加载回复...