CF370 D Memory and Scores
2016-09-13 18:04
453 查看
dp题 并运用了前缀和
我看题目提示中有fft 我想了下感觉复杂度不过关还是未解
我看题目提示中有fft 我想了下感觉复杂度不过关还是未解
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 4e5+5; const int MOD = 1e9+7; const int ze = 2e5; ll dp[2][MAXN]; ll sum[MAXN]; int main(){ int a,b,k,t; while(~scanf("%d %d %d %d",&a,&b,&k,&t)) { memset(dp,0,sizeof(dp)); int fl= 1; dp[1][ze] = 1; sum[0] = 0; for(int i = 1; i <= t; ++i) { for(int j = 1; j < MAXN; ++j) { sum[j] = (dp[fl][j]+sum[j-1]) %MOD; } memset(dp[fl^1],0,sizeof(dp[fl^1])); for(int j = 1; j < MAXN; ++j) { int t1 = max(0,j-k-1); int t2 = min(MAXN-1, j+k); dp[fl^1][j] = (dp[fl^1][j]+sum[t2]-sum[t1]+MOD) %MOD; } fl ^= 1; } for(int i = 1; i < MAXN; ++i) { sum[i] = (dp[fl][i] + sum[i-1]) %MOD; } ll ans = 0; for(int i = 1; i < MAXN; ++i) { int tt = a-b+i; if(tt >= MAXN) tt = MAXN; if(tt < 1) tt = 1; ans = (ans + dp[fl][i]*sum[tt-1]%MOD)%MOD; } printf("%lld\n",ans); } return 0; }
相关文章推荐
- CF370 D Memory and Scores
- 【26.87%】【codeforces 712D】Memory and Scores
- 【Codeforces Round 370 (Div 2) D】【前缀和打标记】Memory and Scores 双人随机数值增减K A比B多的方案数
- Codeforces Round 370 (Div 2) D.Memory and Scores 【前缀和 DP】双人随机数值增减K A比B多的方案数
- Codeforces 712D: Memory and Scores
- Codeforces Round #370 (Div. 2) D. Memory and Scores 动态规划
- CodeForces 712 D.Memory and Scores(dp)
- Codeforces Round #370 (Div. 2) D. Memory and Scores
- Codeforces Round #370 (Div. 2) D. Memory and Scores(DP)
- Memory and Scores
- Codeforces 712 D. Memory and Scores (DP+滚动数组+前缀和优化)
- [CF712D]Memory and Scores
- 【DP or 生成函数】[CodeForces - 712D]Memory and Scores
- Codeforces Round #370 (Div. 2) D. Memory and Scores —— DP
- 【CF712D】Memory and Scores(概率,DP,前缀和)
- 动态规划(Memory and Scores,cf 712D)
- Codeforces Round #370 (Div. 2) D. Memory and Scores 动态规划
- Codeforces Round #370 (Div. 2) D. Memory and Scores DP
- [CF 712D] Memory and Scores
- Memory and Register