Codeforces A ACM (ACronym Maker) (dp)
http://codeforces.com/gym/100650
概要:给出一个缩写,和一些单词,从单词中按顺序选一些字母作为缩写,问方案数。
限制:某些单词要忽略,每个单词至少要选一个字母。
dp[i][j]表示到第i个单词的时候已经选了j个字母的方案数。
很明显,当前字符ch是第j个字符的时候,第j-1个字母只能在上一个单词或者这个单词中ch之前出现,所以有dp[i][j] += dp[i][j-1] + dp[i-1][j-1]。
边界条件为dp[i][0] = 1。由于i只由i-1和自身决定因此可用滚动数组优化。
#include<bits/stdc++.h>
using namespace std; int n;
const int maxn = ;
char str[maxn];
char tar[maxn];
char word[maxn]; int sscan_line(char *s,char *&s0)
{
if(!*s0) return ;
int i = , j = ;
while(s0[i] == ' ') i++;
for(j = ;s0[i] && s0[i] != ' '; i++){
s[j++] = s0[i];
}
s[j] = '\0'; s0+=i;
return j;
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n)&&n){
set<string> ig;
while(n--){
scanf("%s",str);
ig.insert(str);
}
scanf("\n");
while(gets(str) && strcmp(str,"LAST CASE") != ){
//stringstream sin.(str)
char *p = str;
int tlen = sscan_line(tar,p);
int dp[maxn]={} ; dp[] = ;
for(int i = ; tar[i]; i++){
tar[i] += 'a'-'A';
}
while(sscan_line(word,p)){
if(ig.count(word) != ) continue;
int ndp[maxn]={};
for(int i = ; word[i]; i++)
for(int j = tlen-; ~j; j--)
if(word[i] == tar[j])
ndp[j+] += dp[j]+ndp[j];
copy(ndp,ndp+maxn,dp);
}
for(int i = ; i < tlen; i++){
tar[i] -= 'a'-'A';
}
int ans = dp[tlen];
if(ans) printf("%s can be formed in %d ways\n",tar,ans);
else printf("%s is not a valid abbreviation\n",tar);
}
}
return ;
}
Codeforces A ACM (ACronym Maker) (dp)的更多相关文章
- CodeForces - 710E Generate a String (dp)
题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...
- Educational Codeforces Round 51 D. Bicolorings(dp)
https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思 ...
- Codeforces 536D - Tavas in Kansas(dp)
Codeforces 题目传送门 & 洛谷题目传送门 其实这题本该 2019 年 12 月就 AC 的(详情请见 ycx 发此题题解的时间),然鹅鸽到了现在-- 首先以 \(s,t\) 分别为 ...
- Codeforces 295D - Greg and Caves(dp)
题意: 给出一个 \(n \times m\) 的矩阵,需对其进行黑白染色,使得以下条件成立: 存在区间 \([l,r]\)(\(1\leq l\leq r\leq n\)),使得第 \(l,l+1, ...
- Codeforces 467C George and Job(DP)
题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released ...
- codeforces 813 D. Two Melodies(dp)
题目链接:http://codeforces.com/contest/813/problem/D 题意:求两个不相交的子集长度之和最大是多少,能放入同一子集的条件是首先顺序不能变,然后每一个相邻的要么 ...
- codeforces 762 D. Maximum path(dp)
题目链接:http://codeforces.com/problemset/problem/762/D 题意:给出一个3*n的矩阵然后问从左上角到右下角最大权值是多少,而且每一个点可以走上下左右,但是 ...
- CodeForces - 446A DZY Loves Sequences(dp)
题意:给定一个序列a,求最长的连续子序列b的长度,在至多修改b内一个数字(可修改为任何数字)的条件下,使得b严格递增. 分析: 1.因为至多修改一个数字,假设修改a[i], 2.若能使a[i] < ...
- Codeforces 559E - Gerald and Path(dp)
题面传送门 真·难度 *3000 的 D1E hb 跟我们说"做不出来不太应该". 首先我们将所有线段按 \(a_i\) 从小到大排序,一个很显然的想法是 \(dp_{i,j,d} ...
随机推荐
- c++中编译链接总结
1 编译链接过程分为 预处理--->编译---->汇编---->链接.如下图所示 2 预处理都做了什么 (1)将所有的#define删除并展开所有的宏 (2)处理所有的条件预编译指令 ...
- Tomcat自定义classLoader加密解密
class很好反编译,所以需要对class文件先进行加密,然后使用自己的classloader进行解密并加载. [步骤] 大概分两步: 1.对class文件进行加密 2.写解密class文件并加载的c ...
- JSBridge框架解决通信问题实现移动端跨平台开发
一.跨平台开发是趋势 目前主流的移动端平台主要是Android和iOS,为了尽可能复用代码和节省开发成本,各大巨头都开发了自己的跨平台框架,比如Facebook的React-Native.阿里的Wee ...
- 如何将基于对话框的MFC工程改成基于BCG的
1.stdafx.h 加入如下内容.BCGCBProInc.h间接导入了lib. 2.应用程序类的父类由CWinApp改成CBCGPWinApp.构造函数增加如下代码: 3.对话框的父类有CDialo ...
- unity从模型中抽取动画文件(animation)
http://www.cnblogs.com/leng-yuye/archive/2013/01/11/2856144.html 由于模型是由第三方的软件制作的,用unity不能直接编辑模型里的动画文 ...
- UpdateObjectClient 空白目录有问题
UpdateObjectClient 如果目标文件夹下面有空白目录的话 有可能造成无法下载所有文件
- CentOS 利用 yum 安装卸载软件常用命令
一.yum安装和卸载软件 有个前提是yum安装的软件包都是rpm格式的. 安装的命令是,yum install ~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突, ...
- idea ultmate版安装后toolWindows没有database
点击Configure--->plugins将database勾选
- 转 错误:ORA-28002/ORA-65162 : the password will expire within 7 days 解决方法
今天在使用sqlplus时出现 =============================================== ERROR:ORA-28002: the password will e ...
- 解析Javascript事件冒泡机制(转)
本文转自:http://blog.csdn.net/luanlouis/article/details/23927347 1. 事件 在浏览器客户端应用平台,基本生都是以事件驱动的,即某个事件发生,然 ...