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的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词.其中包含一个词典. 那么既然用到了这种国际化的框架,那么就避免不了中文分词.尤其是国内特殊行业比 ...
随机推荐
- Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令
Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令 ------------------------------------------------------------------ ...
- 应用maven自动部署的脚本
@(编程) 最近写了一个自动部署的脚本,可以一键部署到测试服务器或者生产服务器上,包括一个函数脚本和一个调用脚本,比较简单,记录如下. 特点如下: 部署前自动备份 可以部署tomcat项目和java项 ...
- SPOJ DQUERY 离线树状数组+离散化
LINK 题意:给出$(n <= 30000)$个数,$q <= 2e5$个查询,每个查询要求给出$[l,r]$内不同元素的个数 思路:这题可用主席树查询历史版本的方法做,感觉这个比较容易 ...
- PAT 1009. Triple Inversions (35) 数状数组
Given a list of N integers A1, A2, A3,...AN, there's a famous problem to count the number of inversi ...
- each()和eq()
今天工作的时候要遍历一个表格,于是我就想到了each(),也没看文档就开始写,大概是这么写的 $(".class").each(function(){ this.click(fun ...
- Jenkins 通过ssh 拷贝文件到远程机器上。
想实现的目的是: 在构建之前,从jenkins master上拷贝脚本到需要运行的机器上(linux ssh). 本来是通过publish over ssh 的transfer set可以直接设置,但 ...
- redis笔记之两种持久化备份方式(RDB & AOF)
Redis支持的两种持久化备份方式(RDB & AOF) redis支持两种持久化方式,一种是RDB,一种是AOF. RDB是根据指定的规则定时将内存中的数据备份到硬盘上,AOF是在每次执行命 ...
- javascript 中的 this 关键字详解
1.javascript 中 什么是 this? this 指的是当前行为执行的主体,或者是当前方法执行的主体 context:是当前行为或者方法执行的环境 实例: xx 去北京饭店吃东西:上下文是“ ...
- Distance Gym - 102028I (思维)
题目链接:https://cn.vjudge.net/problem/Gym-102028I 具体思路:首先我们选定左边界和右边界.然后每一次按照左边一个,第二次右边一个的规律往上就可以了 具体原因: ...
- WordPress友情链接插件的安装
插件:link manager 这样就安装成功! 在外观小工具里 把右边即可 这样在前台页面上就可看见添加的友情链接了!!!