NKOJ P4135 加法游戏

DP毒瘤题!

问题描述

何老板和你玩一个加法计算游戏。
游戏开始,何老板手中有一个整数a,你手中有一个整数b。
每一轮,两人各自都从区间[-k,k]中任意取出一个整数,加到自己手中的数字上。游戏总共进行了t轮。

何老板希望,游戏结束时,他手中的数字比你手中的数字大。
问满足何老板希望的游戏方案数有多少?
如果两场游戏中,存在一轮,某个玩家取的数字不同,我们就认为这是两场方案不同的游戏。
比如:下面两场游戏,a=5,b=4,t=2,两人最终取得的分数没有变化,但我们认为这是两场不同的游戏。
第一场:
何: 5 3 2
你: 4 2 2
第二场:
何:5 3 2
你:4 1 3

输入格式

一行,四个整数a,b,k,t
1 ≤ a, b ≤ 100
1 ≤ k ≤ 1000
1 ≤ t ≤ 100

输出格式

一行,一个整数,表示计算结果。
结果可能很大,mod 1000000007 后再输出

样例输入
5 3 1 1
样例输出
8

我不会告诉你我这道题光推柿子推了两天。

我也不会告诉你我因为MOD WA了5次。

我更不会告诉你这道题的方程恶心得一批算了不能骂街。

这道题真的恶心毒瘤。/毫无防备地流下了属于真正蒟蒻的眼泪

好了让我控制一下情绪进入正题。

首先不要看到数据范围就慌,这题复杂度是 O ( t 2 k ) O(t^2k) O(t2k) 的(话说NKOJ评测姬原来这么快的吗)。

看到这道题,显然是按照轮数划分阶段。每轮的状态又如何表示呢?我们可以用何老板和你手中数字的差值来表示。但是这样可能出现何老板手中的数字比你小的情况,所以我们要加上一个偏移量。

于是状态:

f [ i ] [ j ] f[i][j] f[i][j] 表示游戏进行i轮后,何老板手中数字比你多j+偏移量的方案数。

状态转移方程很好推:

f [ i ] [ j ] = f[i][j]= f[i][j]= s u m sum sum { f [ i − 1 ] [ j + l ] × ( 2 k − ∣ l ∣ + 1 ) f[i-1][j+l] \times (2k-\vert l\vert + 1) f[i1][j+l]×(2kl+1)} ( − 2 k ≤ l ≤ 2 k ) (-2k \leq l \leq 2k) (2kl2k)

为什么要乘 ( 2 t − ∣ l ∣ + 1 ) (2t-\vert l\vert + 1) (2tl+1) 呢?这是因为在一轮之内使何老板与你的差值增加 l l l ( 2 k − ∣ l ∣ + 1 ) (2k-\vert l\vert + 1) (2kl+1) 种取数方案。

妈妈我做出来这道题了!

看一下时间复杂度这不是 O ( k 2 t 2 ) O(k^2t^2) O(k2t2)吗(j那一维

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值