字典树,$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 分词的更多相关文章

  1. 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 ...

  2. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  3. 结巴分词3--基于汉字成词能力的HMM模型识别未登录词

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 算法简介 在 结巴分词2--基于前缀词典及动态规划实现分词 博 ...

  4. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...

  5. Python学习实践------正向最大匹配中文分词

    正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...

  6. 中文分词之结巴分词~~~附使用场景+demo(net)

    常用技能(更新ing):http://www.cnblogs.com/dunitian/p/4822808.html#skill 技能总纲(更新ing):http://www.cnblogs.com/ ...

  7. OpenNLP:驾驭文本,分词那些事

    OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...

  8. 中文分词工具探析(二):Jieba

    1. 前言 Jieba是由fxsjy大神开源的一款中文分词工具,一款属于工业界的分词工具--模型易用简单.代码清晰可读,推荐有志学习NLP或Python的读一下源码.与采用分词模型Bigram + H ...

  9. Solr5.5.1 IK中文分词配置与使用

    前言 用过Lucene.net的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词.其中包含一个词典. 那么既然用到了这种国际化的框架,那么就避免不了中文分词.尤其是国内特殊行业比 ...

随机推荐

  1. Java enum的用法详解 (转)

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...

  2. [ERROR] Too many connections 尚未解决

    [ERROR] - com.alibaba.druid.support.logging.Log4j2Impl.error(Log4j2Impl.java:53) - create connection ...

  3. 一个ASP.NET中使用的MessageBox类

    /// <summary> /// 自定义信息对话框 /// </summary> public class MessageBox { /// <summary> ...

  4. 【Atcoder】AGC022 C - Remainder Game 搜索

    [题目]C - Remainder Game [题意]给定n个数字的序列A,每次可以选择一个数字k并选择一些数字对k取模,花费2^k的代价.要求最终变成序列B,求最小代价或无解.n<=50,0& ...

  5. 机器学习-kNN-数据归一化

    一.为什么需要数据归一化 不同数据之间因为单位不同,导致数值差距十分大,容易导致预测结果被某项数据主导,所以需要进行数据的归一化. 解决方案:将所有数据映射到同一尺度 二.最值归一化 normaliz ...

  6. JavaScript三种绑定事件的方式

    JavaScript三种绑定事件的方式: 1. <div id="btn" onclick="clickone()"></div> // ...

  7. c语言学习笔记.内存管理.

    内存: 每个程序的内存是分区的:堆区.栈区.静态区.代码区. 1.代码区:放置所有的可执行代码,包括main函数. 2.静态区:存放所有的全局变量和静态变量. 3.栈区:栈(stack),先进后出.存 ...

  8. Linux sqlite3基本命令

    简介sqlite3一款主要用于嵌入式的轻量级数据库,本文旨在为熟悉sqlite3基本命令提供技术文档. 备注:本文所有操作均在root用户下进行. 1.安装sqlite3 ubuntu下安装sqlit ...

  9. (转)USB体系结构

    转载地址:http://blog.ednchina.com/zenhuateng/203584/Message.aspx USB总线接口层:物理连接.电气信号环境.信息包传输机制:主机一方由USB主控 ...

  10. AD服务器安装文档

    Windows Server 2008 R2 AD服务器搭建 1. AD服务器简介 应用到: Windows Server 2003, Windows Server 2003 R2, Windows ...