uva 1633 Dyslexic Gollum
题意:
给出n和k,求出长度为n的不包含长度大于等于k的回文串的01字符串的个数。
思路:
如果一个字符串包含长度为k的回文串,那么它肯定包含长度为k-1的回文串,所以考虑第i位的时候,只要前缀中不包含长度为k的回文串,就只需要考虑这一位使其满足条件,所以就可以进行递推dp了。
设dp[i][j]为长度为i的字符串且最后k位为j时满足的串的个数,因为k较小,所以可以进行状态压缩。
但是考虑k的长度是不行的,还需要考虑k+1才行,比如k = 4,j为0010,那么转移就可以转移到00100,后四位虽然满足,但是这5位显然是个回文串,所以需要考虑多一位。
首先预处理出长度为i,状态为j时是否时回文串。
bit数组用于保存2的i-1次方,即bit[i] = 2^(i-1)。
cal用于计算当前的最后k位。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = ;
const int K = ;
const int mod = 1e9 + ;
bool pal[K][<<K];
int bit[K];
int dp[N][(<<K)];
bool check(int x,int k)
{
int b[K];
memset(b,,sizeof(b));
int cnt = ;
while (x)
{
b[cnt++] = x % ;
x /= ;
}
for (int i = ;i < k/;i++)
{
if (b[i] != b[k - i - ]) return ;
}
return ;
}
int cal(int x,int y,int k)
{
if (x >= bit[k]) x -= bit[k];
return x << | y;
}
int main()
{
bit[] = ;
bit[] = ;
for (int i = ;i < K;i++) bit[i] = bit[i-] << ;
for (int i = ;i < K;i++)
{
for (int j = ;j < (<<i);j++)
{
if (check(j,i)) pal[i][j] = ;
}
}
int t;
scanf("%d",&t);
while (t--)
{
int n,k;
scanf("%d%d",&n,&k);
if (k == )
{
puts("");
continue;
}
memset(dp,,sizeof(dp));
dp[][] = ;
for (int i = ;i <= n;i++)
{
for (int j = ;j < ( << min(i,k));j++)
{
if (!dp[i-][j]) continue;
for (int x = ;x < ;x++)
{
int sta = cal(j,x,k);
if (i >= k && pal[k][sta]) continue;
if (i >= k + && (pal[k+][j<<|x])) continue;
dp[i][sta] += dp[i-][j];
dp[i][sta] %= mod;
}
}
}
int ans = ;
for (int i = ;i < (<<k);i++)
{
ans += dp[n][i];
ans %= mod;
}
printf("%d\n",ans);
}
return ;
}
/*
3 2 2 3 3 3 4
*/
uva 1633 Dyslexic Gollum的更多相关文章
- 【Uva 1633】Dyslexic Gollum
[Link]: [Description] 输入正整数n和k(1≤n≤400,1≤k≤10),求长度为n的01串中有多少个不含长度至少 为k的回文连续子串.例如,n=k=3时只有4个串满足条件:001 ...
- Dyslexic Gollum
题意: 求长度是n的二进制串中,不含长度大于等于k的回文串的个数 分析: dp[i][j][k]表示长度i,后11位状态是j不含长度大于等于k的回文串的个数(因为k最大是10,所把后11位状态压缩,d ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
随机推荐
- mysql插入一条记录时有自增id怎么办
①可以把id的值设置为null或者0,这样子mysql都会自己做处理 ②手动指定需要插入的列,不插入这一个字段的数据!
- codechef Sum of Cubes 图论
正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j])k,i,j∈S,S为点集的子集 然后因为k的取值只有[1,3],所以这里分类 ...
- javax.lang.model Implementation Backed by Core Reflection
javax.lang.model Implementation Backed by Core Reflection 1.javax.lang.model: How do I get the type ...
- jquery 请求返回的几种方式
页面代码 <form id="form1" runat="server"> <div> <p> Ajax请求ashx返回js ...
- navicat如何导出mysql数据表结构
我们在创建数据库时会对字段进行设置,比如类型.长度等,如果字段多的话一个个设置非常麻烦,可以从其他地方已有的表导入数据表结构,怎么操作呢?我们拿navicat导出mysql数据表结构为例: 1.点击“ ...
- The iOS Simulator deployment target is set to 6.0
XCODE警告 Showing All Messages :-1: The iOS Simulator deployment target is set to 6.0, but the range o ...
- 012-Future、FutureTask、CompletionService 、CompletableFuture
一.概述 创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果.如果需要获取执行结果,就必须通过共享变量或 ...
- Redis入门到高可用(一)——初识Redis
一.Redis是什么 * 开源 * 基于键值的存储服务系统 * 支持多种数据结构 * 高性能,功能丰富 二.Redis特性 ♦️ 概述 * 速度快 * 支持持久化 * 支持多种数据结构 * 支持多种编 ...
- sublime使用手册
1.怎么批量选中开头和结尾?将光标定位到区域的开头,ctrl+alt+下键(一直按下键). 2.怎么打开和关闭tab的自动补全?preferences->settings->User{ & ...
- golang 编译或链接 c语言动态、静态库的方法, golang 与 c语言 相互调用
1.golang链接c静态库的方法可以见这个示例: https://github.com/atercattus/go-static-link-example https://github.com/sh ...