题目链接:http://codeforces.com/contest/766/problem/C

题意:给你一个长度为n的字符串,这个字符串只包含小写字母,然后让你把这个字符串进行分割,形成若干个小的字符串,

每个小写字母都有一个数字ma[i],表示这个字母能够存在于长度不超过ma[i]的字符串内, 在这个条件下分割问最多有几

种分割方法,最长分割串为多少,最小分割为几部分。

一道简单的dp,很明显要设dp[i]表示到i位一共有几种分割方法然后递推,注意更新过程中要满足所有子串。然后再设f[i]

表示到前i位最小分割为几部分,然后差不多。

大致转移如下。

for(int i = 1 ; i <= n ; i++) {

for(int j = 1 ; j <= i ; j++) {//递推

int l = i - j + 1 , r = i;

int flag = 0;

for(int k = l ; k <= r ; k++) {//使得范围内所有子串满足条件后再修改

int len = r - l + 1;

if(el[s[k] - 'a'] < len) {

flag = 1;

break;

}

}

if(!flag) {

dp[i] = (dp[i] + dp[i - j]) % mod;

MINF[i] = min(MINF[i] , MINF[i - j] + 1);

MAX = max(MAX , j);

}

}

}

#include <iostream>
#include <cstring>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
char s[1010];
int el[26] , MAX , MINF[1010];
ll dp[1010];
int main() {
int n;
cin >> n;
cin >> s + 1;
for(int i = 0 ; i < 26 ; i++) {
cin >> el[i];
}
memset(dp , 0 , sizeof(dp));
memset(MINF , inf , sizeof(MINF));
dp[0] = 1 , MAX = 1 , MINF[0] = 0;
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= i ; j++) {
int l = i - j + 1 , r = i;
int flag = 0;
for(int k = l ; k <= r ; k++) {
int len = r - l + 1;
if(el[s[k] - 'a'] < len) {
flag = 1;
break;
}
}
if(!flag) {
dp[i] = (dp[i] + dp[i - j]) % mod;
MINF[i] = min(MINF[i] , MINF[i - j] + 1);
MAX = max(MAX , j);
}
}
}
cout << dp[n] << endl;
cout << MAX << endl;
cout << MINF[n] << endl;
return 0;
}

codeforces 766 C. Mahmoud and a Message(简单dp)的更多相关文章

  1. Codeforces 766C:Mahmoud and a Message(DP)

    题目链接:http://codeforces.com/problemset/problem/766/C 题意 有一个长度为n的字符串,第二行有26个数字,位置1~26对应为a~z的字母,数值表示该字母 ...

  2. 【codeforces 766C】Mahmoud and a Message

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. Codeforces Round #260 (Div. 1) A. Boredom (简单dp)

    题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...

  4. codeforces Gym 100500H A. Potion of Immortality 简单DP

    Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...

  5. codeforces 766 D. Mahmoud and a Dictionary(种类并查集+stl)

    题目链接:http://codeforces.com/contest/766/problem/D 题意:给你n个单词,m个关系(两个单词是反义词还是同义词),然后问你所给的关系里面有没有错的,最后再给 ...

  6. codeforces#766 D. Mahmoud and a Dictionary (并查集)

    题意:给出n个单词,m条关系,q个询问,每个对应关系有,a和b是同义词,a和b是反义词,如果对应关系无法成立就输出no,并且忽视这个关系,如果可以成立则加入这个约束,并且输出yes.每次询问两个单词的 ...

  7. codeforces 687C - The Values You Can Make 简单dp

    题意:一个数组a[i],你可以挑出若干个数(只能挑一次)加起来等于k, 针对每一种方案,你可以选出这若干个数的子集来组合新数 最后所有的方案能组合出多少种数 分析:一看数据范围n,k<=500 ...

  8. Codeforces Round #396 (Div. 2) C. Mahmoud and a Message dp

    C. Mahmoud and a Message 题目连接: http://codeforces.com/contest/766/problem/C Description Mahmoud wrote ...

  9. Codeforces Round #396 (Div. 2) C. Mahmoud and a Message

    地址:http://codeforces.com/contest/766/problem/C 题目: C. Mahmoud and a Message time limit per test 2 se ...

随机推荐

  1. dubbo负载均衡是如何实现的?

    dubbo的负载均衡全部由AbstractLoadBalance的子类来实现 RandomLoadBalance 随机 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀 ...

  2. JavaFX 选择文件 导入Excel文件并解析

    FXML 控制器 : @FXML public void selectExcel(MouseEvent event) { FileChooser fileChooser = new FileChoos ...

  3. Ok-Http | Android 网络请求框架使用方式

    POST : package he3.sd.util; import com.parkingwang.okhttp3.LogInterceptor.LogInterceptor; import jav ...

  4. Java | Map排序,工具类改进

    package util; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...

  5. HTML/CSS:导航栏水平和垂直

    1.垂直导航栏 导航栏 = 链接列表导航栏基本上是一个链接列表,因此使用 <ul> 和 <li> 元素是非常合适的.如需构建垂直导航栏,我们只需要定义 <a> 元素 ...

  6. strstr函数使用中的一个错误解决

    最近使用ESP8266的时候,联网的过程中需要使用strstr函数来读取串口发来的某些重要信息, 使用strstr函数发现某些时候能够正常返回需要寻找的字符串的指针,有些时候找不到,后来发现原来是这样 ...

  7. Consul的反熵

    熵 熵是衡量某个体系中事物混乱程度的一个指标,是从热力学第二定律借鉴过来的. 熵增原理 孤立系统的熵永不自动减少,熵在可逆过程中不变,在不可逆过程中增加.熵增加原理是热力学第二定律的又一种表述,它更为 ...

  8. JavaScript 数组、字符串、Map、Set 方法整理

    在线阅读 https://www.kancloud.cn/chenmk/web-knowledges/1080519 数组 isArray():Array.isArray(value) 用于检测变量是 ...

  9. 谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能

    一.前言 surging是基于.NET CORE 服务引擎.初始版本诞生于2017年6月份,经过NCC社区二年的孵化,2.0版本将在2019年08月28日进行发布,经历二年的发展,已经全部攘括了微服务 ...

  10. 一个有趣的 5 X 5 方阵一笔画问题

      这个问题是在我上小学时同学告诉我的,当时觉得好玩,就随便瞎画这玩儿,不过从小学到大学,没有一次画成功过.这个问题起初同学告诉我的时候,图不是这样画的,我只是为了好表达,将问题抽象成网格了,原问题是 ...