1题解
在这里插入图片描述
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int mp[15][15];
int dir[4][2]= {{0,1},{1,0},{-1,0},{0,-1}};
int ans;
int maxx;
int n,m,T;
void dfs(int t,int x,int y)
{
if(t==T)
{
if(x==n-1&&y==m-1)
{
if(ans>maxx)
maxx=ans;
}
return;
}
for(int i=0; i<4; i++)
{
int dx=x+dir[i][0];
int dy=y+dir[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<m)
{
if((t+1)%mp[dx][dy]==0)
{
ans++;
}
dfs(t+1,dx,dy);
//注意回溯
if((t+1)%mp[dx][dy]==0)
{
ans--;
}
}
}
}
int main()
{
cin>>n>>m>>T;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
cin>>mp[i][j];
}
dfs(0,0,0);
cout<<maxx<<endl;
return 0;
}
2带路径的写法:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int mp[15][15];
//右、下、上、左
int dir[4][2]= {{0,1},{1,0},{-1,0},{0,-1}};
char ch[4]={'R','D','U','L'};
int ans;
int maxx;
int n,m,T;
string s;//记录路径
void dfs(int t,int x,int y)
{
if(t==T)
{
if(x==n-1&&y==m-1)
{
if(ans>maxx)
maxx=ans;
cout<<ans<<" "<<s<<endl;
}
else{
cout<<0<<" "<<s<<endl;
}
return;
}
for(int i=0; i<4; i++)
{
int dx=x+dir[i][0];
int dy=y+dir[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<m)
{
if((t+1)%mp[dx][dy]==0)
{
s+=ch[i];
ans++;
}
dfs(t+1,dx,dy);
//注意回溯
if((t+1)%mp[dx][dy]==0)
{
s.pop_back();
ans--;
}
}
}
}
int main()
{
cin>>n>>m>>T;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
cin>>mp[i][j];
}
dfs(0,0,0);
cout<<maxx<<endl;
return 0;
}
3 string类的使用
string a="abcd";
1.获取字符串最后一个字符
auto b=a.back(); //结果为 b='d';
2.修改字符串最后一个字符
a.back()='!'; //结果为 a="abc!";
3.获取字符串第一个字符
auto b=a.front(); //结果为 b='a';
4.修改字符串第一个字符
a.front()='!'; //结果为 a="!bcd";