第十七周 6.20 --- 6.26
2016-06-21 11:25
190 查看
6.20 --- 6.23
发呆..
6.24
周杰伦的床边故事>.<...............开心
cf349 div2 C - Robbers' watch
想到了数的位数不会超过7位,但是暴力的姿势不对
自己 是每一位 去枚举,然后还要枚举分割点,还要判重,很麻烦
还崩掉了
标程的办法,直接枚举数值
View Code
发呆..
6.24
周杰伦的床边故事>.<...............开心
cf349 div2 C - Robbers' watch
想到了数的位数不会超过7位,但是暴力的姿势不对
自己 是每一位 去枚举,然后还要枚举分割点,还要判重,很麻烦
还崩掉了
标程的办法,直接枚举数值
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int mod = 1e9+7; const int maxn = 5e3+5; int dp[maxn][maxn],g[maxn][maxn],lcp[maxn][maxn]; int n; char s[maxn]; int dayu(int i,int j,int len){ if(lcp[i][j] >= len) return 0; int cc = lcp[i][j]; return s[i+cc] > s[j+cc]; } void solve(){ memset(lcp,0,sizeof(lcp)); for(int i = n;i >= 1;i--){ for(int j = n;j >= 1;j--){ if(s[i] == s[j]) lcp[i][j] = lcp[i+1][j+1]+1; } } memset(dp,0,sizeof(dp));memset(g,0,sizeof(g)); for(int i = 1;i <= n;i++){ for(int j = 1;j < i;j++){ g[i][j] = g[i][j-1]; if(s[i-j+1] == '0') continue; dp[i][j] = (dp[i][j] + g[i-j][min(j-1,i-j)])%mod; if(dp[i-j][j] && dayu(i-j+1,i-2*j+1,j)){ dp[i][j] = (dp[i][j]+dp[i-j][j])%mod; } g[i][j] = (g[i][j]+dp[i][j])%mod; } dp[i][i] = 1; g[i][i] = (g[i][i-1]+dp[i][i])%mod; } int ans = 0; for(int i = 1;i <= n;i++){ ans = (ans+dp [i])%mod; } printf("%d\n",ans); } int main(){ while(scanf("%d",&n) != EOF){ scanf("%s",s+1); solve(); } return 0; }
View Code
相关文章推荐
- java 服务器学习之 位运算
- 8-27练习
- C++ fstream流的eof()函数多读一行的问题
- EventBus3.0.0了解及使用
- Lua笔记 & 与C之间的交互
- 第6章 构建可启动的系统镜像
- [leetcode] 【查找】 35. Search Insert Position
- 二分法查找
- 源程序出现各种奇怪的符号P
- 5种方法快速去掉HTML中Inline-Block的空白
- JSP和JS的区别
- android:clearTaskOnLaunch=true 和android:finishTaskOnLaunch=true
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- C++网络编程服务器select模型(参考)
- Swift 算法实战之路:栈和队列
- 如何将PDF文件页面转换为图片
- 安卓自定义搜索框(searchview)
- 字符的左右移动-java
- Android初级教程理论知识(第八章网络编程二)
- Python3 简介