https://codeforces.com/problemset/problem/766/C


有一个长度为n的字符串,第二行有26个数字,位置1~26对应为a~z的字母,数值表示该字母不能出现在长度超过该值的子串中。

求有多少种划分该字符串的方法
求该字符串划分成子串后最大的子串的长度
求该字符串划分成满足要求的子串需要至少划分多少次


思路:dp[i]定义到i的答案,枚举最后一段的长度用以划分

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e3+100;
typedef long long LL;
const LL mod=1e9+7;
inline LL read(){LL x=0,f=1;char ch=getchar();   while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
char str[maxn];
LL limit[30];
LL dp[maxn],maxlen=0,pd[maxn];
LL sum[maxn][30];
int main(void){cin.tie(0);std::ios::sync_with_stdio(false);LL n;cin>>n;cin>>(str+1);for(LL i=1;i<=26;i++) cin>>limit[i];memset(pd,0x3f,sizeof(pd));dp[0]=1;pd[0]=0;for(LL i=1;i<=n;i++){LL mx=limit[str[i]-'a'+1];for(LL j=i;j>=1;j--){LL len=i-j+1;mx=min(mx,limit[(str[j]-'a'+1)]);if(len>mx) break;dp[i]=(dp[i]%mod+dp[j-1]%mod)%mod;maxlen=max(maxlen,len);pd[i]=min(pd[i],pd[j-1]+1);}}cout<<dp[n]<<"\n"<<maxlen<<"\n"<<pd[n]<<"\n";return 0;
}
/*有一个长度为n的字符串,第二行有26个数字,位置1~26对应为a~z的字母,数值表示该字母不能出现在长度超过该值的子串中。///求有多少种划分该字符串的方法
求该字符串划分成子串后最大的子串的长度
求该字符串划分成满足要求的子串需要至少划分多少次*/

766C - Mahmoud and a Message(dp)相关推荐

  1. CodeForces - 766C - Mahmoud and a Message dp

    题意 给出一个字符串 和每个字符的限制数量ai 让我们随意的切割成多个字符串 使得每一个字符串中的特定字符所在的子串长度len<=ai 求一共有多少个符合题目要求的方案 求其中最长的一个串长度是 ...

  2. codeforces 766 C Mahmoud and a Message

    题目链接:http://codeforces.com/contest/766/problem/C 题目: Mahmoud wrote a message s of length n. He wants ...

  3. Codeforces Round #396(Div. 2)

    Codeforces Round #396 A. Mahmoud and Longest Uncommon Subsequence 题意 给定两串,求最长非公共子串. 非公共子串:A串的某子串sub_ ...

  4. Codeforces 766E Mahmoud and a xor trip(树形DP)

    题目链接 Mahmoud and a xor trip 树形DP.先考虑每个点到他本身的距离和,再算所有点两两距离和. 做的时候考虑二进制拆位即可. #include <bits/stdc++. ...

  5. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip 二进制拆位+树型dp

    E. Mahmoud and a xor trip 链接: http://codeforces.com/contest/766/problem/E 题意: 给定一颗n节点的树以及每个节点的权值,另di ...

  6. LeetCode 91. Decode Ways--动态规划DP的Python和Java解法

    题目地址: LeetCode 动态规划(Dynamic programming)系列题目:LeetCode 动态规划(Dynamic programming)系列题目 A message contai ...

  7. NOIP2008传纸条[DP]

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  8. POJ 3267为什么优先队列超时,DP就能过,难过

    The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11846 Accepted: 5693 Desc ...

  9. dp主机_MODBUS 和 PROFIBUS-DP 协议有什么区别

    modbus协议和 profibus DP协议两者的区别和用途主要在哪里?相比好多工控人都有这个疑问.今天小编带大家一起学习一下. 一.modbus协议和 profibus DP协议综述 Modbus ...

最新文章

  1. 【Boost】timer、progress_timer和progress_display
  2. 帝国Cms批量上传多图morepic上传超过最大文件2m的限制的方法
  3. xheditor的使用方法
  4. VTK:PolyData之CellCenters
  5. Colaboratory挂载google drive的两种网盘
  6. 移植uboot之修改代码支持NorFlash记录
  7. 16进制加法 keil_C/C++编程笔记:C语言进制详解,二进制、八进制和十六进制
  8. 苏州宾馆管理也计算机哪个学校好,苏州十大寄宿式中学学校排名榜
  9. python安装第三方库-常见错误解决
  10. Debian wheezy安装Redis 3.0
  11. java的IO操作之--RandomAccessFile
  12. mysql卸载注意问题_mysql卸载注意事项
  13. 小管家进销存_美团入局共享充电宝,专家称或收购一两家,同行称雷声大雨点小...
  14. 树的计数 + prufer序列与Cayley公式 学习笔记
  15. VS2016相对路径起点
  16. 运维知识讲解之电脑局域网服务器的密码设置和修改
  17. 2.3 zio入门——一些常见的zio操作符
  18. 优质高效,阿里甩出SpringBoot巅峰之作,进阶不二之选
  19. 台式电脑win10系统怎么开启无线服务器,台式电脑win10怎么连wifi_window10台式如何连接wifi...
  20. pppd详解_pppd命令使用详解

热门文章

  1. mysql_row百度百科_MySQL
  2. ABB机器人虚拟软件RobotStudio和开发环境的安装包
  3. java中文乱码 例子_JSP中文乱码常见3个例子及其解决方法
  4. noip1999 旅行家的预算 (贪心)
  5. 数据库三大范式的理解
  6. 神经网络应用_我们为应用选择了神经变态,这就是我们的做法
  7. php电商开源框架,Fecshop是基于php Yii2框架之上开发的一款优秀的开源电商系统
  8. 平板电脑与计算机连接网络,平板电脑连接网络的方法
  9. java-实战:进制转换
  10. Marco's Java【小工具篇 之 Google Zxing 二维码生成】