牛客网暑期ACM多校训练营(第二场) A - run - 动态规划
2018-08-28 09:49
543 查看
run
题解:
简单的动态规划。
题目提到 White Cloud 有两种移动方式① walk 1 meters per second,② run k meters per second。
也就是说从次末状态到末状态有两种方式即 “walk 1 meters” 和 “run k meters” 。
也就是说,我们只需要把倒退 1 meter 和 k meters 的两种状态求出来就求出末状态。
从上面我们可以想到 “dp[i] = dp[i-1] + dp[i-k];” ,但是要注意,题目还有一个条件 Since White Cloud is tired,it can't run for two or more continuous seconds ,即White Cloud 不能连续奔跑。所以,我们要写成 “dp[i] = dp[i-1] + dp[i-k-1];” 。
还有要注意的是,因为 Init 函数里 %mod 可能导致 dp[r] < dp[l-1] ,所以 dp[r] + mod 以确保 > dp[l-1]。
代码:
[code]#include <cstdio> using namespace std; const int MAXN = 1e5+10; const int mod = 1e9+7; int k, q, l, r; int dp[MAXN]; void Init(){ for(int i = 0; i < k; i++) dp[i] = 1; dp[k] = 2; for(int i = k+1; i <= 100000; i++) dp[i] = (dp[i-1] + dp[i-k-1]) % mod; for(int i = 1; i <= 100000; i++) dp[i] = (dp[i] + dp[i-1]) % mod; return ; } int main(){ scanf("%d %d", &q, &k); Init(); while(q--){ scanf("%d %d", &l, &r); printf("%d\n", (dp[r] - dp[l-1] + mod)%mod); } return 0; }
阅读更多
相关文章推荐
- 牛客网暑期ACM多校训练营(第三场)G:Coloring Tree(函数的思想)
- 牛客网暑期ACM多校训练营 记录
- 牛客网2018年全国多校算法寒假训练营练习比赛(第二场)(8题)
- 2018年全国多校算法寒假训练营练习比赛(第二场) B.TaoTao要吃鸡(动态规划)
- 动态规划-背包的基础上进行模拟 2018年全国多校算法寒假训练营练习比赛(第二场)牛客网B题
- 牛客网2018年全国多校算法寒假训练营练习比赛(第二场) B TaoTao要吃鸡 (01背包)
- 牛客网暑期多校训练第二场G题
- 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) 题解
- 2018年全国多校算法寒假训练营练习比赛(第二场)E
- 2018年全国多校算法寒假训练营练习比赛(第二场) G 送分了QAQ(数位DP 或打表区间 水)
- 2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡(模拟)
- 2018年全国多校算法寒假训练营练习比赛(第二场) B TaoTao要吃鸡 (0 1背包 特殊处理一个物品)
- 2018年全国多校算法寒假训练营练习比赛(第二场) E 小G有一个大树(树状DP 未解决)
- 2018年全国多校算法寒假训练营练习比赛(第二场) A.不凡的夫夫
- 2018年全国多校算法寒假训练营练习比赛(第二场) F
- 2015 ACM多校训练第二场
- 2018年全国多校算法寒假训练营练习比赛(第二场)G
- 2018年全国多校算法寒假训练营练习比赛(第二场)B - TaoTao要吃鸡
- 2018年全国多校算法寒假训练营练习比赛(第二场) G 送分了QAQ(数位DP 或打表区间 水)
- 2018年全国多校算法寒假训练营练习比赛(第二场)