CodeForces - 766C - Mahmoud and a Message dp
题意
给出一个字符串 和每个字符的限制数量ai 让我们随意的切割成多个字符串 使得每一个字符串中的特定字符所在的子串长度len<=ai
求一共有多少个符合题目要求的方案 求其中最长的一个串长度是多少 求其中最少能分成多少个串
长度最大为1000
分析
明显可以用搜索 不过复杂度指数级 计数问题
考虑dp
对于第i个字符 他可以考虑从i-ai+1开始往后到i分割字符 我们这里可以枚举分割的位置
然后记录下来 那么对于第i个字符 我们知道他前面所有字符的分割数量 就可以更新第i个字符的分割方案 假设用dp[i]表示从1到第i个字符的可行分配方案 那么dp[i] +=dp[j]其中合法情况之和 就可以计数出所有情况的可能
code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int mod = 1e9+7;
char a[1010];
int dp[1010],mmin[1010],mmax,res[26];
bool judge(int pos,int l){for(int i=pos-l+1;i<=pos;i++){if(res[a[i]-'a']<l)return 0;}return 1;
}
int main()
{int n;scanf("%d%s",&n,a+1);for(int i=0;i<26;i++)scanf("%d",&res[i]);dp[0]=1;for(int i=1;i<=n;i++){mmin[i] = mod;for(int j=1;j<=i;j++){if(judge(i,j)){//如果符合条件 就把方案数转移到更长的字符下dp[i] = (dp[i]+dp[i-j])%mod;mmin[i] = min(mmin[i],mmin[i-j]+1);//两个dp变量 都要更新 这里就是要把段数一并更新 mmax = max(mmax,j);}}}printf("%d\n%d\n%d\n",dp[n],mmax,mmin[n]);return 0;
}
CodeForces - 766C - Mahmoud and a Message dp相关推荐
- 766C - Mahmoud and a Message(dp)
https://codeforces.com/problemset/problem/766/C 有一个长度为n的字符串,第二行有26个数字,位置1~26对应为a~z的字母,数值表示该字母不能出现在长度 ...
- codeforces 766 C Mahmoud and a Message
题目链接:http://codeforces.com/contest/766/problem/C 题目: Mahmoud wrote a message s of length n. He wants ...
- Codeforces 148D. Bag of mice(概率dp)
Codeforces 148D. Bag of mice(概率dp) Description The dragon and the princess are arguing about what to ...
- Codeforces 766E Mahmoud and a xor trip(树形DP)
题目链接 Mahmoud and a xor trip 树形DP.先考虑每个点到他本身的距离和,再算所有点两两距离和. 做的时候考虑二进制拆位即可. #include <bits/stdc++. ...
- Codeforces 1276D/1259G Tree Elimination (树形DP)
题目链接 http://codeforces.com/contest/1276/problem/D 题解 我什么DP都不会做,吃枣药丸-- 设\(f_{u,j}\)表示\(u\)子树内,\(j=0\) ...
- Codeforces 264B Good Sequences ★ (分解素因子+DP)
题目链接:http://codeforces.com/problemset/problem/264/B 题目大意:给定一个数列a1,a2,a3,a4,--,an(数据保证ai严格递增,n<=10 ...
- Codeforces 118 D. Caesar's Legions (dp)
题目链接:http://codeforces.com/contest/118/problem/D 有n个步兵和m个骑兵要排成一排,其中连续的步兵不能超过k1个,连续的骑兵不能超过k2个. dp[i][ ...
- CodeForces - 468C Hack it!(构造+数位dp)
题目链接:点击查看 题目大意:求出一段区间 [l,r][l,r][l,r] 的数位和对 aaa 取模后为 000.更具体的,设 f(x)f(x)f(x) 为 xxx 的数位和,本题需要求出一对 [l, ...
- CodeForces - 1550E Stringforces(二分+状压dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...
最新文章
- 23Command(命令)模式
- css订单导航栏横线动画,小程序 纯css 实现tab导航栏下划线跟随动画
- 说说在MVC开发中,遇到的错误及解决方法(本文章是我在实际开发中总结出来的,希望对您有帮助)...
- 打开新窗口的js代码
- Boost::context模块fiber的stack测试程序
- 58同城数据库架构最佳实践
- UDT协议实现分析——连接的建立
- import javax.servlet.ServletRequest 关于IDEA javax.servlet.http.HttpServletRequest 不存在 解决方案
- 字符大小端aix linux,long, unsigned long不是跨平台的(慎用)
- C#常用单元测试框架比较:XUnit、NUnit和Visual Studio(MSTest)
- php 类分开写,自己前几天写的无限分类类_PHP教程
- thinkphp5常用函数汇总_thinkphp 5 常用的助手函数
- 微软职位内部推荐-Software Engineer II-Senior Software Engineer for Satori
- html字体版权,字体在网站中的版权问题
- 扎克伯格让员工学会高效工作的26张PPT
- 微信接入之获取用户头像
- BZOJ5294 BJOI2018 二进制 线段树
- 关于数字证书链的一点认知
- 09组团队项目-Alpha冲刺-3/6
- 怎么样把pdf压缩到最小