Codeforces 712D Memory And Scores 前缀和+DP
来源:互联网 发布:linux 下载速度很慢 编辑:程序博客网 时间:2024/06/06 15:52
点击打开链接
Problem D
题意:两人初始分数为(a,b) 总共t轮 每轮 两人随机从[-k,k]中选一个数加到自己的得分上.a,b,t<=100,k<=1000.问t轮后第一个人分数大于第2个人的方法数%mod,任意一轮中抽的不一样视为不同方案.法1:设dp[i][dif] i轮后 两人相差dif(设个offset转移负数)
dp[i][dif]+=dp[i-1][dif+(x-y)] -2k<=x-y<=2k -> dp[i][dif]+=(2k+1-z)*dp[i-1][dif+z) -2k<=z<=2k 可以向下面的方法一样化简
法2:设dp[i][sum] 抽i次 总和为sum的方法数
dp[i][sum]+=dp[i-1][sum] x=[-k,k] 时间复杂度为O(t*kt*k) TLE
化解dp[i][sum]=dp[i][sum-1]-dp[i-1][sum+k]+dp[i-1][sum-1-k] (dp[i][sum-1]拆出来多一项少一项)
时间复杂度降为O(t*tk),枚举第二个抽人的sum 则第一个人至少要抽sum+b-a+1,利用前缀求出至少抽sum的方法数即可
#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=1e9+7;const int N=3e5+20;ll a,b,k,t;ll dp[110][N*2],pre[N*2];ll calc(ll i,ll j){if(j<0)return 0;return dp[i][j];}int main(){while(cin>>a>>b>>k>>t){int offset=N;// offset-> zeromemset(dp,0,sizeof(dp));dp[0][offset+0]=1;for(int i=1;i<=t;i++){for(int j=-offset;j<=offset;j++){//j-k~j+k//j-k-1~j-k-1dp[i][j+offset]=(calc(i,j-1+offset)+calc(i-1,j+k+offset)-calc(i-1,j-k-1+offset))%mod;dp[i][j+offset]=(dp[i][j+offset]%mod+mod)%mod;}}ll ans=0;//pre[i] for(int i=offset;i>=-offset;i--)pre[i+offset]=(pre[i+1+offset]+dp[t][i+offset])%mod;for(int i=-offset;i<=offset;i++){int o=i+b-a+1;ans=(ans+(dp[t][i+offset]*pre[max(0,o+offset)])%mod)%mod;}cout<<ans<<endl;}return 0;}
阅读全文
0 0
- Codeforces 712D Memory and Scores【dp+前缀和】
- Codeforces 712D Memory And Scores 前缀和+DP
- Codeforces 712D Memory and Scores(前缀和优化dp)
- codeforces 712D Memory and Scores (dp)
- 【DP or 生成函数】[CodeForces - 712D]Memory and Scores
- codeforces 712D. Memory and Scores(dp)
- CodeForces 712D Memory and Scores
- 【26.87%】【codeforces 712D】Memory and Scores
- codeforces712D Memory and Scores(前缀和优化dp)
- Codeforces Round 370 (Div 2) D.Memory and Scores 【前缀和 DP】双人随机数值增减K A比B多的方案数
- Memory and Scores CodeForces
- Codeforces Round #370 (Div. 2) D. Memory and Scores(DP)
- Codeforces Round #370 (Div. 2) D. Memory and Scores —— DP
- 【Codeforces Round 370 (Div 2) D】【前缀和打标记】Memory and Scores 双人随机数值增减K A比B多的方案数
- [CF 712D] Memory and Scores
- Codeforces Round #370 (Div. 2) D. Memory and Scores
- CF370 D Memory and Scores
- 动态规划(Memory and Scores,cf 712D)
- (安卓APP)简单的首页广告倒计时实现代码
- 进程死锁
- java中token
- Linux 目录配置标准:FHS
- 【精通hibernate】(4)hibernate事务管理以及并发问题处理
- Codeforces 712D Memory And Scores 前缀和+DP
- 洛谷 P1091 合唱队形
- error C2143: syntax error : missing ';' before
- Houdini学习 —— 基于节点的过程化建模初探及思考
- Scala基础
- 数据库学习中使用的表
- 算法第4版(Java语言描述)课后习题答案
- Android问题集锦之五十二:unsupported reloc 43
- 判断组成回文的字符串序列