题目链接:传送门biubiubiu~
分析:题意大概是在起始点先具有指定能量,然后他能走到他能量范围内的点,并变为那个点的能量,求他走到终点的方案。。。。自己看题时想复杂了很多,以为能力是会叠加的。。。。还以为第四点的意思是到终点要控制剩多少能量。。。。。。难受了一波
思路:运用dp思想,大概就是把从某点开始,所获得能量后能到的点都遍历一遍,用dp[i][j]来表示到达(i,j)点所有的方案数。
AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int t,dp[105][105],a[105][105];
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
memset(dp,0,sizeof(dp));
dp[1][1]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
int dx,dy;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(dx=0;dx<=a[i][j];dx++){
if(i+dx>n) break;
for(dy=0;dy+dx<=a[i][j];dy++){
if(dx==0&&dy==0) continue;
if(j+dy>m) break;
dp[i+dx][j+dy]=(dp[i][j]+dp[i+dx][j+dy])%10000;
}
}
}
}
cout<<dp[n][m]<<endl;
}
}