博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 480C Riding in a Lift dp
阅读量:5836 次
发布时间:2019-06-18

本文共 1217 字,大约阅读时间需要 4 分钟。

主题链接:

意甲冠军:

特定 n a b k

构造一个长度k该序列。

使得序列中 对于随意两个相邻的数 | w[i-1] - w[i] | < | w[i] - b |

且第一个数 |a - w[1] | < | w[1] - b |

问:

有多少种不同的序列。

思路:dp

对于粗暴的dp复杂度是 n^3

我们能够用前缀和来优化掉一维的dp。。

反正是简单粗暴的题。详细看代码吧。。

#include 
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N = 5005;const ll mod = 1000000007;int a, b, K, n;ll dp[N][N], sum[N];void put(int k){ printf("%d:", k); for(int i = 1; i <= n; i++)pt(dp[k][i]),putchar(' '); puts("");}ll solve(){ dp[0][a] = 1; for(int k = 1; k <= K; k++) { sum[0] = 0; for(int i = 1; i <= n; i++) { sum[i] = sum[i-1] + dp[k-1][i]; if(sum[i] >= mod) sum[i] -= mod; } for(int i = 1, j; i <= n; i++) { if(i==b)continue; j = (b+i)>>1; if(i < b) { if(b-j <= j-i) j--; dp[k][i] = sum[j] - dp[k-1][i]; } else { if(j-b <= i-j) j++; dp[k][i] = sum[n] - sum[j-1] - dp[k-1][i]; } if(dp[k][i] < 0){ dp[k][i] %= mod; dp[k][i] += mod; } } } ll ans = 0; for(int i = 1; i <= n; i++){ ans += dp[K][i]; if(ans >= mod) ans -= mod; } return ans;}int main() { while(cin>>n>>a>>b>>K){ memset(dp, 0, sizeof dp); cout<

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
MyBatis使用DEMO及cache的使用心得
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
李娜入选国际网球名人堂 成亚洲第一人
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>
jsp改造之sitemesh注意事项
查看>>
SpringBoot-Shiro使用
查看>>
iOS 9.0之后NSString encode方法替换
查看>>
解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
查看>>
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
查看>>
CRM Transaction处理中的权限控制
查看>>
[转]linux创建链接文件的两种方法
查看>>
python ipaddress模块使用
查看>>
文件权限
查看>>