1373

  洛谷 1373:

 题意
  n*m的矩阵,每个点有个值在0~k之间,从任意点出发A取当前点的值,B取下个点(上个点向下或想右)的值,A,B轮流取,要求以A开头以B结束A,B
  取的值%(k+1) 想等的方案有多少。

 思路

 很容易想到五维的定义:dp[i][j][k][w][0/1]  表示 到达i,j这个格子,A取了k,B取了w,该A或B取的方案数。

  空间复杂度:800*800*15*15*2=288000000  288000000/1024/1024=274.6  开不下

  考虑到其实A取多少B取多少 不影响答案,影响答案的是A,B的差值。

  定义 dp[i][j][w][0/2] 到ij这个格子,A,B的差值是w,该A/B取的方案数(w是A-B的值)

 考虑转移: 显然 dp[i][j][??][0] 只能由dp[i][j-1][??][1] 和dp[i-1][j][??][1]转移过来

 考虑??: 当前A取,差值为x  dp[i][j][x][0]=dp[i-1][j][(x-a[i][j]+k)%k)][1]+dp[i][j][x][0]+dp[i][j-1][(x-a[i][j]+k)%k)][1]; 

              当前B取,差值为y dp[i][j][x][1]=dp[i-1][j][(x+a[i][j])%k][0]+dp[i][j][x][1]+dp[i][j-1][(x+a[i][j]+k)%k][1];

              注:此处k为读入的k+1,a[i][j]表示ij格的值

 思路就完了,再加上些细节就过了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值