Codeforces 712D DP
题意:有2个人玩游戏,他们都有个初始值a和b, 游戏进行t轮, 每次可以选择加上一个[-k, +k]之间的数字,问有多少种方案a的和严格大于b的和。
思路:如果不考虑多于这个条件,只是询问有多少种方案的化,这是一个数塔模型的DP, 设dp[i][j]为到i位置,前面的数的和为j的方案数,直接转移即可。需要用前缀和优化。对两个人分别DP一次,然后枚举第一个人的最后的和,去找第二个人有多少个和小于它的方案。这个也需要用前缀和来优化。
代码:
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod = 1000000007;
const int maxn = 210010;
LL dp[2][110][maxn];
LL sum[2][maxn];
LL get_sum(int pos, int l, int r, int lb, int rb) {
l = max(l, lb);
r = min(r, rb);
if(l > r) return 0;
return (sum[pos][r] - sum[pos][l - 1] + mod) % mod;
}
int main() {
int a, b, k, t;
scanf("%d%d%d%d", &a, &b, &k, &t);
int ed = 210000;
dp[0][0][t * k + 1 + a] = 1;
dp[1][0][t * k + 1 + b] = 1;
for (int pos = 0; pos <= 1; pos++) {
for (int i = 1; i <= t; i++) {
for (int j = 1; j <= ed; j++)
sum[pos][j] = (sum[pos][j - 1] + dp[pos][i - 1][j]) % mod;
for (int j = 1; j <= ed; j++)
dp[pos][i][j] = get_sum(pos, j - k, j + k, 1, ed);
}
}
for (int pos = 0; pos <= 1; pos++) {
for (int i = 1; i <= ed; i++)
sum[pos][i] = (sum[pos][i - 1] + dp[pos][t][i]) % mod;
}
LL ans = 0;
for (int i = a + 1; i <= a + 1 + 2 * t * k; i++) {
ans = (ans + (dp[0][t][i] * get_sum(1, 1, i - 1, b + 1, b + 1 + 2 * t * k)) % mod) % mod;
}
printf("%lld\n", ans);
}
Codeforces 712D DP的更多相关文章
- [CodeForces - 712D]Memory and Scores (DP 或者 生成函数)
题目大意: 两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高. ( ...
- Two Melodies CodeForces - 813D (DP,技巧)
https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...
- Consecutive Subsequence CodeForces - 977F(dp)
Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...
- codeforces的dp专题
1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...
- Codeforces 721C [dp][拓扑排序]
/* 题意:给你一个有向无环图.给一个限定t. 问从1点到n点,在不超过t的情况下,最多可以拜访几个点. 保证至少有一条路时限不超过t. 思路: 1.由无后向性我们可以知道(取决于该图是一个DAG), ...
- CodeForces 607C (DP) Hard problem
题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...
- Codeforces 611d [DP][字符串]
/* 题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字. 要求将整个字符串划分成严格递增的几个数字,并且不允许前导零. 思路: 1.很开心得发现,当我在前i个区间以后再加一个区间的时候 ...
- Codeforces 404D [DP]
/* 我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的. 题意: 给你一个长度为1e6的由?*01 ...
- Codeforces 119C DP
题意: 有n天,m门课和常数k; 每天上一门课,每门课程有两个属性,最少作业量a,最多作业量b,和难度c. 1<=a<=b<=1e16 c<=100 1<=n<=m ...
随机推荐
- Linux 制作补丁 打补丁 撤销补丁
1.制作补丁 diff - 逐行比较文件 格式 diff 参数 旧文件/旧文件夹 新文件/新文件夹 -N 将不存在的文件看作是空的 -a 将所有文件都视为文本文件 -u 以合并 ...
- 从汇编的角度看待const与#define
先观察一下的代码: #include<stdio.h> int main(){ ; int y; int *pi=(int*)&i; *pi=; y=*pi; int tempi; ...
- SQL中利用脚本恢复数据库
SQL中利用脚本恢复数据库 编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,如何恢复数据库 use master drop database SCS1 RESTORE DATAB ...
- UEFI 启动GPT分区 Win10和Ubuntu16.04双系统安装
测试机器:联想小新锐7000 工具:UltraISO 系统下载 为Ubuntu分配空间 右键“我的电脑”——>“管理”——>“磁盘管理”,(win+x快捷键)选择一个有很大空闲空间的磁盘, ...
- GOF23设计模式之责任链模式(chain of responsibility)
一.责任链模式概述 将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求. 如果能则处理,否则传递给链上的下一个对象去处理. 定义责任链 (1)通过链表 ...
- (转)Linq DataTable的修改和查询
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Maven构建项目速度太慢的解决办法 Maven 调试
Apache Maven是当今非常流行的项目构建和管理工具,它把开发人员从繁杂的项目依赖关系处理事务中解放出来,完全自动化管理依赖问题.在Web应用开发过程中,通常我们会用到maven的archety ...
- 短URL链接系统
定义: 短网址(Short URL),顾名思义就是在形式上比较短的网址.但不知道有多少人像我一样,由于面试问道才知道有这种系统而对短连接原理好奇,从而进行进一步的研究.在Web 2.0的今天,不得不说 ...
- 转:Ubuntu下用Sublime输入中文
最近用上ubuntu跑theano,碰到的一个问题就是用sublime编辑代码的时候无法输入中文. 读代码经常要写注释不能用中文是在是麻烦. 曾经考虑过使用别的文本编辑器,但是sublime的用户界面 ...
- Mysql本地服务器安装
1.下载并解压 2.新建my.ini my.ini内容如下(路径填写自己的): ------------------------------------------------------------ ...