gym-101343B-So You Think You Can Count?

 1 /*
 2 把一个字符串分成若干段,每一段里面的字符不能重复,问有多少种分法
 3 动态规划,定义dp 表示字符串前n个字母的分法种数,先预处理字符串,对于每个字符,
 4 计算出以这个字符为结尾的无重复字符的一段最长的长度,第i个字符对应的长度记为f[i]
 5 然后可以得出递推式:
 6 dp[0]=1;
 7 dp[i]=dp(i-j) (1<=j<=f[i])
 8 */
 9 #include <bits/stdc++.h>
10 using namespace std;
11 int dp[10005];
12 int f[10005];
13 bool vis[10];
14 const int mod=1e9+7;
15 int main()
16 {
17     string s;
18     int n;
19     cin>>n>>s;
20     memset(dp,0,sizeof(dp));
21     memset(f,0,sizeof(f));
22     for(int i=0;i<n;i++)
23     {
24         memset(vis,0,sizeof(vis));
25         int cnt=0;
26         for(int j=i;j>=0;j--)
27         {
28             if(vis[s[j]-‘0‘])
29                 break;
30             cnt++;
31             vis[s[j]-‘0‘]=1;
32         }
33         f[i+1]=cnt;
34     }
35     dp[0]=1;
36     for(int i=1;i<=n;i++)
37     {
38         int sum=0;
39         for(int j=1;j<=f[i];j++)
40         {
41             sum=(sum+dp[i-j])%mod;
42         }
43         dp[i]=sum;
44     }
45     cout<<dp[n]%mod<<endl;
46 }
时间: 2024-10-11 17:00:42

gym-101343B-So You Think You Can Count?的相关文章

nodejs api 中文文档

文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格式 目录 关于本文档 稳定度 JSON 输出 概述 全局对象 global process console 类: Buffer require() require.resolve() require.cache require.extensions __filename __dirname module e

Gym - 100625F Count Ways 快速幂+容斥原理

题意:n*m的格子,中间有若干点不能走,问从左上角到右下角有多少种走法. 思路:CountWay(i,j) 表示从 i 点到 j 点的种数.然后用容斥原理加加减减解决 1 #pragma comment(linker, "/STACK:1000000000") 2 #include <iostream> 3 #include <cstdio> 4 #include <fstream> 5 #include <algorithm> 6 #i

CodeForces Gym 101063C 二进制压缩

http://codeforces.com/gym/101063/problem/C 给n个人,m样物品,每个人可以从物品中选择几样.两人选择物品的交集元素个数比上并集元素个数如果大于某个比例即可将两人配对.求配对数. n的范围是1e5,直接比较所有人的选择会TLE,应该将所有选择物品的情况用二进制压缩,m最大是10,情况数目小于2048,可以接受.注意配对总数范围应为long long. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> i

SYSU-7, Gym 100273J, trie+hash

cnm毛子的题是正宗内家拳法啊orz(捶地),拼的就是智商,这题我们队想了老半天后缀自动机,掏出各种黑科技无果 题目大意:构建一个自动机可以表达给定的n个串,询问最小的自动机节点树为多少. 解:最裸的自动机其实就是一棵trie,那么我们考虑优化这棵trie,考虑拓扑排序倒过来做,可以发现其实如果两个节点如果他们指向的节点状态完全一致,那么这两个节点是等价的,所以我们不断合并这些节点即可.但是拓扑可能会慢,而且貌似会退化n方(没细想),但一般地,我们用dfs出栈序去做这个hash去重即可. cnm

Codeforces Gym 100637A A. Nano alarm-clocks 前缀和处理

A. Nano alarm-clocks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100637/problem/A Description An old watchmaker has n stopped nano alarm-clocks numbered with integers from 1 to n. Nano alarm-clocks count time in hours, and

Gym 100342J &amp; Gym 100345H (bitset在图论题的应用)

bitset bitset在某些常数优化以及状态保存方面被称之为神器并不为过,主要表现在以下几个方面: 1. 状态表示.试想,用一个数来表示状态的极限是64位,而bitset可以保存任意位二进制数,并且修改简单,统计方便,并且支持批量操作. 2. 常数优化.图论的题,尤其涉及不带权的邻接图,算法经常动辄 n2,n3 ,这个时候我们可以用n个bitset存储每个点的邻接情况,并进行相应位操作,来替代直接遍历图的操作,经常可以将总复杂度降低为原来的1/32甚至还要少! 3. 集合运算.交集按位与,并

Codeforces Gym 100637A A. Nano alarm-clocks 前缀和

A. Nano alarm-clocks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100637/problem/A Description An old watchmaker has n stopped nano alarm-clocks numbered with integers from 1 to n. Nano alarm-clocks count time in hours, and

Codeforces Gym 100610 Problem E. Explicit Formula 水题

Problem E. Explicit Formula Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100610 Description Consider 10 Boolean variables x1, x2, x3, x4, x5, x6, x7, x8, x9, and x10. Consider all pairs and triplets of distinct variables amon

codeforces Gym 100500 J. Bye Bye Russia

Problem J. Bye Bye RussiaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/attachments Description It was the last day at Russia, after the World Finals has ended. Coach fegla was travelling back to Cairo on the same day b

Gym 101102J---Divisible Numbers(反推技巧题)

题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an array A of integers of size N, and Q queries. For each query, you will be given a set of distinct integers S and two integers L and R that represent a