usaco 2.3 prefix
来源:互联网 发布:最便宜的域名注册 编辑:程序博客网 时间:2024/05/17 21:39
Dynamic programming动态规划
由前往后面扫S字符串
dp[i+prim[j].size()-1 ] = dp[i-1] + prim[j].size() (prim[j]与s.substr(i,i+prim[j].size() 匹配))加上一个限制条件dp[i-1]!=0,则可以保证可以与前缀连接起来
#include <iostream>#include <cstdio>#include <cstring>#define N 202using namespace std;string s = "";string prim[N];int ps = 0;int dp[200020];int main(){ freopen("prefix.in","r",stdin); freopen("prefix.out","w",stdout); int maxsub = 0; do { cin >> prim[ps]; if (prim[ps].size()>maxsub) maxsub = prim[ps].size(); }while (prim[ps++][0]!='.'); string tmp; while (cin >> tmp) { s +=tmp; } memset(dp,0,sizeof(dp)); for (int j=0;j<ps;j++) { tmp = s.substr(0,prim[j].size()); if (tmp==prim[j]) { dp[0+prim[j].size()-1] = prim[j].size(); } } for (int i=1;i<s.size();i++) { for (int j=0;j<ps;j++) { //如果剩余匹配长度大于基元长度,则无必要比较 if (prim[j].size()+i>s.size()) continue; //如果不是前缀子串,则没必要比较 if (dp[i-1]==0) continue; tmp = s.substr(i,prim[j].size()); if (tmp==prim[j]) { if (prim[j].size()+dp[i-1] > dp[i+prim[j].size()-1]) dp[i+prim[j].size()-1] = prim[j].size()+dp[i-1]; } } } maxsub = 0; for (int i=0;i<s.size();i++) { if (dp[i]>maxsub) maxsub = dp[i]; } cout << maxsub << endl; return 0;}
- usaco 2.3 prefix
- USACO 2.3 Longest Prefix
- usaco 2.3.1 prefix
- USACO 2.3 The Longest Prefix (prefix)
- USACO Section 2.3 Longest Prefix
- USACO 2.3.1 Longest Prefix
- USACO--2.3Longest Prefix+DP
- USACO 2.3.1 Longest Prefix
- USACO Section 2.3 Longest Prefix
- USACO 2.3 Longest Prefix 题解
- USACO prefix
- USACO/prefix
- USACO/prefix
- usaco prefix
- USACO 2.3.1The Longest Prefix
- USACO Section 2.3 The Longest Prefix
- USACO section 2.3 Longest Prefix(dp)
- USACO 2.3.1 Longest Prefix --- Trie
- hadoop Capacity Scheduler解析
- 自我动员了!!!
- 新手UVa 10250 The Other Two Tree && 10050 Hartals
- Uva-1401-Remember the Word
- 编写Linux用户空间驱动程序
- usaco 2.3 prefix
- android 代码混淆
- 输入阻抗和输出阻抗
- WIN8蓝屏
- Hibernate多对多双向关联
- static inline 和 extern inline 的含义
- Fedora 14使用iso DVD镜像源yum安装软件
- myeclipse中如何自动生成hibernate得POJO和hbm.xml文件
- POJ 1887