蒟蒻苦思一宿未果,递归函数50分TLE求助
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=105;
int l,n,m,a[N][M],ans;
bool b[N][M];
void up(int x,int y){//x代表楼层,y代表房间号
if(x>n)return;//楼层到顶,则运行结束
ans+=a[x][y];//记录密钥
ans%=20123;
int i=y,op=a[x][y];//i存初始房间号,op存需要经过的有楼梯房间的数量
while(op!=0){
if(b[x][i%m]==1)op--;//如果该房间有楼梯, op--
i++;
}
i--;//while循环最后多运行了一次i++,把它减掉
up(x+1,i%m);//找到了下次查找的初始房间号,进入下一层楼
}
int main(){
//freopen("treasure.in","r",stdin);
//freopen("treasure.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=0;j<m;j++){
cin>>b[i][j]>>a[i][j];
}
cin>>l;
up(1,l);
cout<<ans%20123;
return 0;
}