【CF1082F】Speed Dial(动态规划)
【CF1082F】Speed Dial(动态规划)
题面
题解
把\(Trie\)树建出来之后发现就是一个树型\(dp\),每个点会对于其父亲中第一个被标记的点产生贡献。
那么把第一个点压入状态。
设\(f[i][p][k]\)表示当前点\(i\),其到根的链上第一个被标记的点是\(p\),其子树内总共选了\(k\)个点的最小代价。
枚举儿子是选还是不选进行转移。
时间复杂度\(O(n^2k^2)\)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 505
const int inf=1073741823;
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct Node{int son[10],v;}t[MAX];
int tot=1;
int n,K,ans=inf;char ch[MAX];
int f[MAX][MAX][12],dep[MAX];
void Insert(char *s,int w)
{
int u=1,l=strlen(s+1);
for(int i=1;i<=l;++i)
{
if(!t[u].son[s[i]-48])t[u].son[s[i]-48]=++tot;
u=t[u].son[s[i]-48];dep[u]=i;
}
t[u].v+=w;
}
void cmin(int &x,int y){x=min(x,y);}
int Solve(int u,int ld,int p)
{
if(~f[u][ld][p])return f[u][ld][p];
int g[12];memset(g,63,sizeof(g));
g[u==ld]=t[u].v*(dep[u]-dep[ld]);
for(int i=0;i<=9;++i)
{
int v=t[u].son[i];if(!v)continue;
int tmp[12];memset(tmp,63,sizeof(tmp));
for(int j=0;j<=K;++j)
for(int k=0;k+j<=K;++k)
cmin(tmp[j+k],g[j]+min(Solve(v,ld,k),k?Solve(v,v,k):inf));
for(int j=0;j<=K;++j)g[j]=tmp[j];
}
for(int i=0;i<=K;++i)f[u][ld][p]=g[p];
return f[u][ld][p];
}
int main()
{
n=read();K=read()+1;memset(f,-1,sizeof(f));
if(n<K){puts("0");return 0;}
for(int i=1;i<=n;++i)scanf("%s",ch+1),Insert(ch,read());
for(int i=0;i<=K;++i)ans=min(ans,Solve(1,1,i));
printf("%d\n",ans);
return 0;
}
【CF1082F】Speed Dial(动态规划)的更多相关文章
- HDU 1160 FatMouse's Speed (动态规划、最长下降子序列)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- how to export chrome speed dial extension?
locate chrome-extension_dgpdioedihjhncjafcpgbbjdpbbkikmi_0.localstorage, copy it to you want, everyt ...
- CodeForces 1082 F Speed Dial
题目传送门 题意:现在有n个电话号码,每个电话号码为si,拨打次数为pi. 现在有k 个快捷键,每次拨打号码之前可以先按一次快捷键,然后再输入数字,现在问输入数字次数是多少.快捷键的号码可以不在电话簿 ...
- CF1082解题报告
CF1082A Vasya and Book 模拟一下即可 \(Code\ Below:\) #include <bits/stdc++.h> using namespace std; c ...
- Chrome 及其 插件“个性化设置”备份
Chrome版本发布时间表 2016.10.13 v54.0.2840.59 主题颜色由 蓝色 变为 灰色 2016.11.17 重新使用 Chrome 浏览器(v54.0.2840.99),并设置 ...
- 常用的Firefox浏览器插件、Chrome浏览器插件收藏
[血的教训] 不要去下载“Firefox中国版(谋智网络)”,默认情况下会给你安装好多的莫名其妙的插件,推荐去Firefox官方下载原版. Firefox 原版官方网址: https://www.mo ...
- Windows And Video Memory
MSDN Blogs > Zemblanity > Windows And Video Memory Windows And Video Memory Tom_Mulcahy 11 F ...
- CentOS6.5 安装Sphinx 配置MySQL数据源
前提安装完mysql,并创建测试表和数据 DROP TABLE IF EXISTS `documents`; CREATE TABLE IF NOT EXISTS `documents` ( `i ...
- CentOS6.4 安装Sphinx 配置MySQL数据源
前提安装完mysql,并创建测试表和数据 DROP TABLE IF EXISTS `documents`; CREATE TABLE IF NOT EXISTS `documents` ( `id` ...
随机推荐
- ElasticSearch聚合
前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...
- I/O中断处理详细过程
1.CPU发送启动I/O设备的命令,将I/O接口中的B触发器置1,D触发器置O. 2.设备开始工作,需要向CPU传送数据时,将数据送入数据缓冲器中. 3.输入设备向I/O接口发出“设备工作结束”的信号 ...
- openstack,docker,mesos,k8s关系
openstack,docker,mesos,k8s什么关系? - 知乎https://www.zhihu.com/question/62985699 OpenStack + K8S 环境集成测试ht ...
- linux如何查看所有的用户(user)、用户组(group)、密码(password/passwd)
linux如何查看所有的用户和组信息_百度经验https://jingyan.baidu.com/article/a681b0de159b093b184346a7.html linux添加用户.用户组 ...
- git [command line] fatal: Authentication failed for
fatal: Authentication failed for https://www.jianshu.com/p/8a7f257e07b8 git.exe fetch -v --progress ...
- Python3练习题 006 冒泡排序
import random a = [random.randint(1,100) for i in range(10)]def bu(target): length = len(target) whi ...
- C# 往Datatable中添加新行的步骤
以一个实例说明 //录入年份绑定 public void YearList(FineUIPro.DropDownList ddlYear) { //年份从15年到当前年//起止年份 ; int yea ...
- Zookeeper的作用,在Hadoop及hbase中具体作用
什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么 一.什么是Zookeeper ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hado ...
- python爬虫之git的使用(origin说明)
1.首先我们回忆两个命令 #git remote add origin 远程仓库链接 #git push -u origin master 我们一起看看这个命令,git是git的一级命令,push就是 ...
- groovy安装 ideal
参考:https://blog.csdn.net/newbie_907486852/article/details/80879745 (1) 首先下载groovy: https://gradle.or ...