hdu 1978 How many ways

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1978


第一次接触记忆化搜索+DP..

题目中“他将只有终点所标记的能量”是解题的关键啊!一开始还老想剩余能量怎么处理.....悲剧。

这题可以分为两种DP方式,一种是当前的这个点可以到达其他点的方法数和能到达当前点的方法数。。

两种状态转移方程也差不多。

下面分别是两种方法的AC代码

第一种:

#include<iostream>
using namespace std;
int dp[201][201];
int map[201][201];
int n,m;
int min(int a,int b){ return  a>b?b:a;}

int dfs(int x,int y,int k)
{
	int i,j;
	if(x==n&&y==m)
		return 1;
	if(dp[x][y]!=0)
		return dp[x][y];
	for(i=0;i<=min(k,n-x);i++)

		for(j=0;j<=min(k-i,m-y);j++)
		{
			if(i==0&&j==0)  continue ;
			dp[x][y]+=dfs(x+i,y+j,map[x+i][y+j]);
			dp[x][y]%=10000;
		}
		return dp[x][y];
}
int main()
{
	int t,i,j;
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		memset(dp,0,sizeof(dp));
		memset(map,0,sizeof(map));
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
				cin>>map[i][j];


		dfs(1,1,map[1][1]);

		printf("%d\n",dp[1][1]);
	}
	return 0;
}



第二种:


#include<iostream>
using namespace std;
int dp [201][201];
int main()
{
	int n,m;
	int t,i,j,k,l;
	int num;
	cin>>t;
	while(t--)
	{
		cin>>n>>m;

		memset(dp,0,sizeof(dp));

		dp[0][0]=1;
		for(i=0;i<n;i++)
			for(j=0;j<m;j++)
			{
			//	scanf("%d",&num);
				cin>>num;
				for(k=0;k<=num;k++)
					for(l=0;l+k<=num;l++)
					{
						if(k==0&&l==0)
							continue;
						dp[i+k][j+l]=(dp[i+k][j+l]+dp[i][j])%10000;
					}
			}
			printf("%d\n",dp[n-1][m-1]);
	}
	return 0;
}



1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值