EOJ 3261 分词
字典树,$dp$。
记录$dp[i]$为以$i$为结尾获得的最大价值。枚举结尾一段是哪个单词,更新最大值。可以将字典中单词倒着建一棵字典树。
这题数据有点不严谨。
下面这组数据答案应该是负的。
3
a 0.1
aa 0.1
aaa 0.1
1
aaa
下面这组数据没通过的代码在$OJ$上也可以$AC$......
3
a 2
aa 2
aaa 2
1
aaab
正确答案是:
6.238325
aaa b
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; double eps = 1e-7; struct X
{
double f;
int nx[26];
}s[300010];
int sz=0,root=0; int n,T;
char t[5010];
char tt[5010];
double w; double dp[5010];
int pre[5010]; int r[5010]; void Insert()
{
int p = root;
int len = strlen(t);
for(int i=len-1 ; i>=0 ;i--)
{
if(t[i]>='A'&&t[i]<='Z') t[i] = t[i] -'A' + 'a';
if(s[p].nx[t[i]-'a']==-1) s[p].nx[t[i]-'a'] = ++sz;
p = s[p].nx[t[i]-'a'];
}
s[p].f = w;
} double get(int x)
{
if(x<0) return 0.0;
return dp[x];
} double work(double x)
{
if(x==0.0) return 0.0;
return log(x);
} int main()
{
scanf("%d",&n); for(int i=0;i<=300005;i++)
{
s[i].f = 0;
for(int j=0;j<=25;j++) s[i].nx[j] = -1;
} sz=0; for(int i=1;i<=n;i++)
{
scanf("%s%lf",t,&w);
Insert();
} scanf("%d",&T);
while(T--)
{
scanf("%s",t); tt[0]=0; strcpy(tt,t);
int len = strlen(t); for(int i=0;i<len;i++)
{
if(t[i]>='A'&&t[i]<='Z')
t[i] = t[i] - 'A' +'a';
} memset(dp,0,sizeof dp);
memset(pre,-1,sizeof pre); for(int i=0;i<len;i++)
{
int now = i, p = root; while(1)
{
if(now<0) break;
if(s[p].nx[t[now]-'a']==-1)
{
for(int e=0;e<now;e++)
{
if(dp[i] < dp[e])
{
dp[i] = dp[e];
pre[i] = e;
}
}
break;
}
p = s[p].nx[t[now]-'a']; if(get(now-1) + work(s[p].f)*(i-now+1)*(i-now+1) > dp[i])
{
dp[i] = get(now-1) + work(s[p].f)*(i-now+1)*(i-now+1);
pre[i] = now-1;
} now--;
}
} printf("%.6f\n",dp[len-1]); memset(r,0,sizeof r); int pp = pre[len-1]; while(1)
{
if(pp<0) break;
r[pp]=1;
pp = pre[pp];
} for(int i=0;i<len;i++)
{
printf("%c",tt[i]);
if(r[i]) printf(" ");
}
printf("\n"); } return 0;
}
EOJ 3261 分词的更多相关文章
- EOJ Problem #3261 分词 trie + dp + 小剪枝
http://acm.ecnu.edu.cn/problem/3261/ 分词 Time limit per test: 1.0 seconds Time limit all tests: 1.0 s ...
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- 结巴分词3--基于汉字成词能力的HMM模型识别未登录词
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 算法简介 在 结巴分词2--基于前缀词典及动态规划实现分词 博 ...
- 如何在Elasticsearch中安装中文分词器(IK+pinyin)
如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...
- Python学习实践------正向最大匹配中文分词
正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...
- 中文分词之结巴分词~~~附使用场景+demo(net)
常用技能(更新ing):http://www.cnblogs.com/dunitian/p/4822808.html#skill 技能总纲(更新ing):http://www.cnblogs.com/ ...
- OpenNLP:驾驭文本,分词那些事
OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...
- 中文分词工具探析(二):Jieba
1. 前言 Jieba是由fxsjy大神开源的一款中文分词工具,一款属于工业界的分词工具--模型易用简单.代码清晰可读,推荐有志学习NLP或Python的读一下源码.与采用分词模型Bigram + H ...
- Solr5.5.1 IK中文分词配置与使用
前言 用过Lucene.net的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词.其中包含一个词典. 那么既然用到了这种国际化的框架,那么就避免不了中文分词.尤其是国内特殊行业比 ...
随机推荐
- C语言 结构体作为参数和返回值使用
方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /**************************************** ...
- hdu 4055 Number String
Number String http://acm.hdu.edu.cn/showproblem.php?pid=4055 Time Limit: 10000/5000 MS (Java/Others) ...
- codeforces Good bye 2016 E 线段树维护dp区间合并
codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...
- CF767 B. The Queue 贪心+细节
LINK 题意:一个业务开始时间为s,结束时间为f,一个人办护照的时间需要m分(如果在x时开始服务,且x+m==f那么还是合法的),你可以选择任意时间到达,但如果你和其他人同时到达,你要排在他的后面. ...
- GlusterFS + lagstash + elasticsearch + kibana 3 + redis日志收集存储系统部署 01
因公司数据安全和分析的需要,故调研了一下 GlusterFS + lagstash + elasticsearch + kibana 3 + redis 整合在一起的日志管理应用: 安装,配置过程,使 ...
- Java实现链式存储的二叉树
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
- 【BZOJ】3039: 玉蟾宫 悬线法
[题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ...
- wepy开发小程序 大坑....本地调试ok,小程序上传体验版 组件出现问题
如果你碰到的上述问题(本地调试ok,小程序上传体验版 各种莫名其妙的问题-卡死-组件属性失效-$apply()不起作用) 您需要关闭 微信开发者工具中: 1.微信开发者工具-->项目--> ...
- linux平台 PHP 实现 word转pdf的艰难历程...
1.网上搜索资料 无非是 openoffice + PHP的com组件 然而试了很多次 都不可靠 2.后来找到 openoffice + jodconverter(需java环境) 一.安装openo ...
- Discrete Logging(POJ2417 + BSGS)
题目链接:http://poj.org/problem?id=2417 题目: 题意: 求一个最小的x满足a^x==b(mod p),p为质数. 思路: BSGS板子题,推荐一篇好的BSGS和扩展BS ...