关闭

CodeForces - 766C(基础dp)

标签: dp
159人阅读 评论(0) 收藏 举报
分类:

题目链接:https://vjudge.net/contest/170950#problem/C

题目大意:给一串字符串,只包含26个字母,可以把这串字符串分成若干个子串,但是限定每个字母只能出现在长度Ax的子串里,问最多有多少种分割方案,方案数对1e9+7取膜,以及分割子串最大长度,和最少分割子串数量。

思路:

设dp[i]为从0到i这段字符串的分割方案数,为了满足字符a[i]的限定条件,我们只能在i-Ai+1到i之间划分,设len=i-A[i]+1, 但是i-A[i]+1并不就是可以划分的长度,因为在i-Ai+1到i有些字母的限定子串长度会小于i-A[i]+1,所以我们可以设一个指针j从i这个点开始往下枚举,让len不断更新,当i-j+1>len的时候跳出,所以指针j在跳出之前,都是可以划分的点,假如我们在j这个点划分的话,这就是一种划分的方案,同时我们需要加上j这个点之前的划分方案数,也就是dp[j-1],所以每次枚举都要更新:dp[i]=(dp[i]+dp[j-1])%mod。这样就能求出最大方案数了。

而最大子串长度也就是最大的len,最少划分数可以再开一个dp[i]记录到i这个点的最小划分数,在枚举合法划分点j的时候找到最小的dp[j],然后dp[i]=dp[j]+1就行。

最近废得不行,学啥啥不会,有点绝望,基础dp,貌似一点也不基础,反正不会,只能看看题解理解,

AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
char a[1000+10];
const int mod=1e9+7;
int s[30];
int dp[1000+10],dp2[1000+10];
int main()
{
    int n;
    cin>>n;
    scanf("%s",a+1);
    for(int i=0;i<26;i++)
        cin>>s[i];
    memset(dp,0,sizeof(dp));
    memset(dp2,0,sizeof(dp2));
    dp[0]=1;
    int max_=0,mi;
    for(int i=1;a[i];i++)
    {
        int len=s[a[i]-'a'];
        dp2[i]=mi=10000;
        for(int j=i;j>=1;j--)
        {
            len=min(len,s[a[j]-'a']);
            if(i-j+1>len)
                break;
            dp[i]=(dp[i]+dp[j-1])%mod;
            max_=max(max_,i-j+1);
            mi=min(mi,dp2[j-1]);
        }
        dp2[i]=mi+1;
    }
    cout<<dp[n]<<endl<<max_<<endl<<dp2[n]<<endl;
    return 0;
}
1
0
查看评论

Codeforces 766C Mahmoud and a Message 基础DP

点击打开链接 题意:给定string s 长度n dp[i] 前i个字符的分解方案,按照最后一段的长度来转移 最后一段长度为j && "i-j+1~j"合法 dp[i]+=dp[i-j]  f[i] 前i个字符的分解的最少个数 ...
  • Jeremy1149
  • Jeremy1149
  • 2017-02-08 04:05
  • 410

codeforces 766C Mahmoud and a Message(基础dp)

Mahmoud and a Message time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard o...
  • zwj1452267376
  • zwj1452267376
  • 2017-02-09 00:34
  • 354

codeforces 766 C Mahmoud and a Message [基础DP]【动态规划】

题目连接:http://codeforces.com/contest/766/problem/C———————————————————————–. C. Mahmoud and a Message time limit per test2 seconds memory limit per te...
  • qq_33184171
  • qq_33184171
  • 2017-02-08 22:42
  • 380

codeforces 766C

http://codeforces.com/problemset/problem/776/C题意就是给你一个字符串,之后给你26个数即a[i],那么a[i]表示在字母表中以第i个字符开头的子串的最大长度。在以上条件下你要把这个字符串划分为若干个不重叠的子串。 你要输出的结果有 1. 划分子串的个...
  • My_stage
  • My_stage
  • 2017-03-01 20:01
  • 107

codeforces 455B(博弈+dp)

题目链接:codeforces 455B题目大意:给出n个字符串,进行k次游戏,每次游戏输家下次作为先手,游戏规则为每次放一个字母,导致当前构造的字符串是给定的任意一个字符串的前缀,不能操作时为输,赢得第k次比赛的人会取得最终的胜利,问两人都采取最优策略的情况下,谁会赢得比赛。题目分析: 首先针对这...
  • qq_24451605
  • qq_24451605
  • 2015-09-22 10:01
  • 1013

Codeforces 721C. Journey(DAG上的DP)

传送门 http://codeforces.com/problemset/problem/721/C题目大意: 有一个dag图,代表一个城市。城市里有若干景点,以及连接景点的单向道路,每条道路都有一个通过的时间ti。 你从景点1出发,到景点n,在有限的时间T内,至多能游览几个景点?题目分析: ...
  • cmershen
  • cmershen
  • 2016-10-10 17:50
  • 766

Codeforces 16E Fish (状压dp+概率)

题意有n条鱼,他们相遇时会吃掉对方,给出他们相遇时双方获胜的概率,求这n条鱼最后剩下自己的概率。思路看范围就要考虑状压DP,dp[s]表示当前剩下的鱼的状态为s时的概率。 那么P(i吃掉j) = P(i和j同时存在) *P(ij相遇)* P(i战胜j) 即dp[s ^ (1 << ...
  • Dreamon3
  • Dreamon3
  • 2016-05-08 19:00
  • 544

codeforces 528D. Fuzzy Search (FFT优化DP)

题目描述传送门题目大意:给出一个母串和一个模板串,求模板串在母串中的匹配次数。 匹配时,如果用s[i]匹配t[j],那么只要s[i-k]-s[i+k]中有字母与t[j]相同即可算作匹配成功。其中s[i]表示母串的第i位,t[j]表示模板串的第j位。题解如果数据范围小的话,这题就是一个DP f[i...
  • clover_hxy
  • clover_hxy
  • 2017-02-23 07:57
  • 403

Codeforces-834D The Bakery 线段树优化DP

给n个数,让你分成k个子段,让每个子段中不同数字个数的和最大 dp[i][j]:前i个元素分成j段的最大和 考虑第j段,他的开头为k,那么dp[i][j]=max{dp[k][j-1]+sum[k+1][i] | 0 节点i维护dp[k]+sum(k+1,i),0 #include #includ...
  • qq_34927456
  • qq_34927456
  • 2017-08-14 21:15
  • 116

Codeforces 724E 最大流=最小割+dp求最小割

题意: 有n个城市,每个城市有p【i】的东西,可以在那个城市卖c【i】的东西,两两城市可以进行一次c的运送,只能从小的编号的往大的编号运。 问最多能卖多少货物。 思路: 最大流:建图,s到n个城市为p【i】然后n个城市到t为s【i】,小的编号到大的编号两两为c, 因为图太大,会超内存,所以...
  • naipp
  • naipp
  • 2016-10-10 17:49
  • 673
    个人资料
    • 访问:13889次
    • 积分:884
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条