小a和uim之大逃离,洛谷之提高历练地,动态规划TG.lv(1)(3-2)

正题

      第二题:小a和uim之大逃离

      这题有点烦,但是我们可以从k入手,大小为k的魔瓶,可以装的容量为0到k,那么相当于我们每一次mod 一下k 就行了。

      我们当然也可以从小a和小uim的魔瓶差入手,我们设f[i][j][h][a/uim]为小a或小uim走到(i,j)这个点,小a和小uim的魔瓶差值为h的方案数。

      那么很容易就可以得出动态规划方程。

      f[i][j][k][a]=f[i][j][h-map[i][j]]..

      f[i][j][k][uim]=f[i][j][h+map[i][j]]..

      相加一下即可。

      最后的答案明显就是,以uim结尾的魔瓶差为0的方案数总和。

代码<有些东西还是在程序中才看得出来>

#include
#include
#include

int f[810][810][16][2];
int n,m,k;
int map[810][810];

int suan(int &x,int y)
{
	return x=(x+y)%1000000007;
}

int main()
{
	scanf("%d %d %d",&n,&m,&k);
	k++;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			int x;
			scanf("%d",&x);
			x%=k;
			map[i][j]=x;
			f[i][j][x][0]=1;
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int h=0;h

你可能感兴趣的:(小a和uim之大逃离,洛谷之提高历练地,动态规划TG.lv(1)(3-2))