字典树,$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;
}

最新文章

  1. low-rank 的相关求解方法 (CODE) Low-Rank Matrix Recovery and Completion via Convex Optimization
  2. XE7 &amp; IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)
  3. 在本地创建angular-ui/bootstrap项目
  4. python 调用nmap
  5. 在where条件中使用CASE WHEN 语句
  6. C安全问题与指针误用
  7. Jvm基础(1)-Java运行时数据区
  8. IIS由于无法创建应用程序域,因此未能执行请求。错误: 0x80070005 拒绝访问
  9. HTML中Select的使用具体解释
  10. 神器 Sublime Text 3 的一些常用快捷键
  11. Linux如何生成列表
  12. 如何查询Oracle性能监控
  13. (转)CentoS 下报的 Requires: perl(:MODULE_COMPAT_5.8.8)
  14. TypeScript基本知识(为学习AngularJS2框架做个小铺垫)
  15. 【javascript】您好, 您要的ECMAScript6速记套餐到了
  16. iOS 极光推送 如何点击推送消息跳转页面
  17. [原创]K8Cscan插件之存活主机扫描
  18. SQL 事务隔离级别
  19. linux 基础命令,未完待续
  20. [java,2017-12-01] 播放音频文件

热门文章

  1. bootstrap 栅格calss
  2. [吴恩达机器学习笔记]13聚类K-means
  3. [吴恩达机器学习笔记]12支持向量机6SVM总结
  4. 关于NuGet
  5. 【洛谷 P2764】 最小路径覆盖问题(最大流)
  6. 记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别
  7. webpack编译报错:Module not found: Error: Cannot resolve &#39;file&#39; or &#39;directory&#39; ./../../node_modules..
  8. 8、V模型、W模型、H模型
  9. c语言学习笔记.内存管理.
  10. python算法之近似熵、互近似熵算法