HDU1978(DP)

题目链接:传送门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;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值