UVA 12594 Naming Babies
$dp$,斜率优化。
设$dp[j][i]$表示前$i$个位置分成$j$段的最小值,递推式很好写,预处理几个前缀和就可以了,然后斜率优化即可。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
char c = getchar();
x = ;
while(!isdigit(c)) c = getchar();
while(isdigit(c))
{
x = x * + c - '';
c = getchar();
}
} int T,k;
char t[],s[];
int len,pos[];
int sum0[],sum1[],sum2[],dp[][];
int q[],f1,f2; bool delete1(int t,int a,int b,int c)
{
if( dp[t][b]-sum1[b]-b*sum0[c]+b*sum0[b]+sum0[b]+sum2[b] <=
dp[t][a]-sum1[a]-a*sum0[c]+a*sum0[a]+sum0[a]+sum2[a]
) return ;
return ;
} bool delete2(int t,int a,int b,int c)
{
if(
((dp[t][c]-sum1[c]+c*sum0[c]+sum0[c]+sum2[c])-(dp[t][b]-sum1[b]+b*sum0[b]+sum0[b]+sum2[b]))*(b-a)<=
((dp[t][b]-sum1[b]+b*sum0[b]+sum0[b]+sum2[b])-(dp[t][a]-sum1[a]+a*sum0[a]+sum0[a]+sum2[a]))*(c-b)
) return ;
return ;
} int main()
{
scanf("%d",&T); int cas=;
while(T--)
{
scanf("%s%d%s",t,&k,s);
for(int i=;t[i];i++) pos[t[i]-'a']=i; sum0[]=sum1[]=sum2[]=; for(int i=;s[i];i++)
{
if(i>) sum0[i]=sum0[i-];
sum0[i]=sum0[i]+pos[s[i]-'a']; if(i>) sum1[i]=sum1[i-];
sum1[i]=sum1[i]+i*pos[s[i]-'a']; if(i>) sum2[i]=sum2[i-];
sum2[i]=sum2[i]+pos[s[i]-'a']*pos[s[i]-'a'];
} for(int i=;s[i];i++) dp[][i]=sum1[i]-sum2[i]; len=strlen(s); for(int j=;j<=k;j++)
{
f1=f2=; q[]=j-;
for(int i=j-;i<len;i++)
{
while()
{
if(f2-f1+<) break;
if(delete1(j-,q[f1],q[f1+],i)) f1++;
else break;
} dp[j][i]=dp[j-][q[f1]]+(sum1[i]-sum1[q[f1]])-(q[f1]+)*(sum0[i]-sum0[q[f1]])-(sum2[i]-sum2[q[f1]]); while()
{
if(f2-f1+<) break;
if(delete2(j-,q[f2-],q[f2],i)) f2--;
else break;
} f2++;
q[f2]=i;
}
} printf("Case %d: %d\n",cas++,dp[k][len-]);
}
return ;
}
UVA 12594 Naming Babies的更多相关文章
- [kuangbin带你飞]专题二十 斜率DP
ID Origin Title 20 / 60 Problem A HDU 3507 Print Article 13 / 19 Problem B HDU 2829 Lawr ...
- KUANGBIN带你飞
KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题 //201 ...
- [kuangbin带你飞]专题1-23题目清单总结
[kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...
- ACM--[kuangbin带你飞]--专题1-23
专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 FliptilePOJ 1426 Find T ...
- 算法笔记--斜率优化dp
斜率优化是单调队列优化的推广 用单调队列维护递增的斜率 参考:https://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 以例1举 ...
- 【java】Naming.bind和Registry.bind区别
Naming类和Registry类均在java.rmi包 Naming类通过解析URI绑定远程对象,将URI拆分成主机.端口和远程对象名称,使用的仍是Registry类. public static ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
随机推荐
- 【bzoj1878】[SDOI2009]HH的项链 树状数组
题目描述 HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长.有一 ...
- [Leetcode] first missing positve 缺失的第一个正数
Given an unsorted integer array, find the first missing positive integer. For example,Given[1,2,0]re ...
- HDU4185:Oil Skimming(二分图最大匹配)
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- bzoj 1110 [POI2007]砝码Odw 贪心+进制转化
[POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 661 Solved: 366[Submit][Status][Disc ...
- MySQL 配置文件及逻辑架构
配置文件: linux:/etc/my.cnf 默认配置文件:/usr/share/mysql/my-default.cnf windows:my.ini 主要日志文件: 二 ...
- POJ1286 Necklace of Beads
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8263 Accepted: 3452 Description Beads ...
- ILSPY反编译工具下载代替收费的Reflector工具
原文发布时间为:2011-10-10 -- 来源于本人的百度文章 [由搬家工具导入] ILSPY反编译工具下载 http://build.sharpdevelop.net/BuildArtefacts ...
- 【洛谷 P1364】医院设置(树的重心)
树的重心的定义: 树若以某点为根,使得该树最大子树的结点数最小,那么这个点则为该树的重心,一棵树可能有多个重心. 树的重心的性质: 1.树上所有的点到树的重心的距离之和是最短的,如果有多个重心,那么总 ...
- java 获取当前应用程序路径
package javaapplication1; import javax.swing.JOptionPane; /** * * @author Administrator */ public cl ...
- ubuntu 安装wxpython以及boa-constructor
直接参考 官方的安装文档. 学习python 的时候就 用 wxPython . 那个时候用的是windows 的版本. 现在 用 ubuntu 下开发了.没有搭建好环境. 其实就一句话: sudo ...