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)的更多相关文章

  1. CodeForces - 710E Generate a String (dp)

    题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...

  2. Educational Codeforces Round 51 D. Bicolorings(dp)

    https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思 ...

  3. Codeforces 536D - Tavas in Kansas(dp)

    Codeforces 题目传送门 & 洛谷题目传送门 其实这题本该 2019 年 12 月就 AC 的(详情请见 ycx 发此题题解的时间),然鹅鸽到了现在-- 首先以 \(s,t\) 分别为 ...

  4. Codeforces 295D - Greg and Caves(dp)

    题意: 给出一个 \(n \times m\) 的矩阵,需对其进行黑白染色,使得以下条件成立: 存在区间 \([l,r]\)(\(1\leq l\leq r\leq n\)),使得第 \(l,l+1, ...

  5. Codeforces 467C George and Job(DP)

    题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released ...

  6. codeforces 813 D. Two Melodies(dp)

    题目链接:http://codeforces.com/contest/813/problem/D 题意:求两个不相交的子集长度之和最大是多少,能放入同一子集的条件是首先顺序不能变,然后每一个相邻的要么 ...

  7. codeforces 762 D. Maximum path(dp)

    题目链接:http://codeforces.com/problemset/problem/762/D 题意:给出一个3*n的矩阵然后问从左上角到右下角最大权值是多少,而且每一个点可以走上下左右,但是 ...

  8. CodeForces - 446A DZY Loves Sequences(dp)

    题意:给定一个序列a,求最长的连续子序列b的长度,在至多修改b内一个数字(可修改为任何数字)的条件下,使得b严格递增. 分析: 1.因为至多修改一个数字,假设修改a[i], 2.若能使a[i] < ...

  9. Codeforces 559E - Gerald and Path(dp)

    题面传送门 真·难度 *3000 的 D1E hb 跟我们说"做不出来不太应该". 首先我们将所有线段按 \(a_i\) 从小到大排序,一个很显然的想法是 \(dp_{i,j,d} ...

随机推荐

  1. TypeScript完全解读(26课时)_3.TypeScript完全解读-Symbol

    ts中symbol的支持是按照es6的标准来的,只要我们学会es6中的symbol,就可以直接在ts中使用了 创建symbol 在example文件夹下新建symbol.ts 然后在根目录的index ...

  2. Flutter实战视频-移动电商-20.首页_火爆专区上拉加载效果

    20.首页_火爆专区上拉加载效果 上拉加载的插件比较都.没有一个一枝独秀的 可以自定义酷炫的header和footer 一直在更新 推荐使用这个插件: https://github.com/xuelo ...

  3. Flutter实战视频-移动电商-31.列表页_列表切换交互制作

    31.列表页_列表切换交互制作 博客地址:https://jspang.com/post/FlutterShop.html#toc-c42 点击左侧的大类右边的小类也跟着变化 新建provide 要改 ...

  4. mysql :库操作

    一 系统数据库 information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息,列信息, 权限信息, 字符信息等. performance_schema:M ...

  5. HDU - 1232 畅通工程-并查集模板

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  6. 快速打开和关闭SQL服务

    将下面文本复制到txt中,然后将文本文件另存为bat @echo off for /f "skip=3 tokens=4" %%i in ('sc query MSSQLSERVE ...

  7. POJ3191【(-2)进制本质】

    题意: 实现10进制数转换成-2进制数 思路: 有点意思,先扯些题外话,一个我们经常做的二进制:利用二进制有好多优化,大多都是利用了二进制能够表示一个数,然后优化了空间或者时间. 所以问题很清楚啊,就 ...

  8. Lightoj 1098【数学/玄学】

    题意: 对于每个数求除1和本身的约数和,然后求前n个数的所有这种约数的和: 思路: 首先可以知道对于约数考虑就好了, 对于1-n的约数,n/2-1(减1是因为2不算啊)就是约数为2出现过的次数 如果n ...

  9. 51nodcontest#24 A(xjb)

    題目鏈接:http://www.51nod.com/contest/problem.html#!problemId=1804 題意:中文題誒~ 思路: 三角形個數爲n-1, a, b數組元素個數也爲n ...

  10. [HNOI2010] 平面图判定 planar

    标签:二分图判定.题解: 首先可以把题目中给你的那个环给画出来,这样就可以发现对于任意一个图来说,如果两条边要相交,就不能让他们相交,那么这两条边就要一条在里面一条在外面,如果把环画成一条链,那么就是 ...