[CQOI2017]老C的键盘

题目描述

额,网上题解好像都是用的一大堆组合数,然而我懒得推公式。

设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数。

转移:

\[f[i][j]=\sum f[sn_1][k]*f[sn_2][q]
\]

需要判断一下\(k,q\)与\(j\)的关系满不满足题意就行了。

但是这样的答案显然不对,因为有些权值可能多次出现。

换句话说,有些权值可能没有出现。所以我们就用那个经典的容斥,枚举颜色数上界。

设\(g[s]\)表示颜色数最多为\(s\)的方案数,则\(\displaystyle ans=\sum_{s=1}^n (-1)^{n-s}C_n^sg[s]\)。

代码:

#include<bits/stdc++.h>
#define ll long long
#define N 105 using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;} const ll mod=1e9+7;
int n;
char s[N];
int f[N][N];
int c[N][N];
int Mod(int a) {return a<0?a+mod:(a<mod?a:a-mod);} int g[N][2];
int ans;
void update(int v,int sn,int flag,int sum) {
if(s[sn]=='<') {
for(int j=1;j<=sum;j++) g[j][flag]=Mod(g[j-1][flag]+f[sn][j-1]);
} else {
for(int j=sum;j>=1;j--) g[j][flag]=Mod(g[j+1][flag]+f[sn][j+1]);
}
}
int work(int sum) {
memset(f,0,sizeof(f));
for(int i=n;i>=1;i--) {
memset(g,0,sizeof(g));
if(i*2<=n) update(i,i<<1,0,sum);
else for(int j=1;j<=sum;j++) g[j][0]=1;
if(i*2+1<=n) update(i,i<<1|1,1,sum);
else for(int j=1;j<=sum;j++) g[j][1]=1;
for(int j=1;j<=sum;j++) f[i][j]=1ll*g[j][0]*g[j][1]%mod;
}
int ans=0;
for(int i=1;i<=sum;i++) ans=Mod(ans+f[1][i]);
return ans;
}
int main() {
n=Get();
for(int i=0;i<=n;i++)
for(int j=0;j<=i;j++)
c[i][j]=(!j||i==j)?1:Mod(c[i-1][j-1]+c[i-1][j]);
scanf("%s",s+2);
int flag=1;
for(int i=n;i>=1;i--,flag*=-1) {
ans=(ans+flag*1ll*c[n][i]*work(i)%mod+mod)%mod;
}
cout<<ans;
return 0;
}

[CQOI2017]老C的键盘的更多相关文章

  1. [BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数

    4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 218  Solved: 171[Submit][Statu ...

  2. [BZOJ4824][CQOI2017]老C的键盘(树形DP)

    4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 193  Solved: 149[Submit][Statu ...

  3. bzoj 4824: [Cqoi2017]老C的键盘

    Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...

  4. [bzoj4824][Cqoi2017]老C的键盘

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序在某种 ...

  5. [bzoj4824][洛谷P3757][Cqoi2017]老C的键盘

    Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也 ...

  6. Luogu P3757 [CQOI2017]老C的键盘

    题目描述 老C的键盘 题解 显然对于每个数 x 都有唯一对应的 \(x/2\) , 然而对于每个数 x 却可以成为 \(x*2\) 和 \(x*2+1\) 的对应数 根据这一特性想到了啥??? 感谢l ...

  7. 洛谷 P3757 [CQOI2017]老C的键盘

    题面 luogu 题解 其实就是一颗二叉树 我们假设左儿子小于根,右儿子大于根 考虑树形\(dp\) \(f[u][i]\)表示以\(u\)为根的子树,\(u\)为第\(i\)小 那么考虑子树合并 其 ...

  8. BZOJ3167/BZOJ4824 HEOI2013SAO/CQOI2017老C的键盘(树形dp)

    前者是后者各方面的强化版. 容易想到设f[i][j]表示i子树中第j小的是i的方案数(即只考虑相对关系).比较麻烦的在于转移.考虑逐个合并子树.容易想到枚举根原来的排名和子树根原来的排名,算一发组合数 ...

  9. 【题解】CQOI2017老C的键盘

    建议大家还是不要阅读此文了,因为我觉得这题我的解法实在是又不高效又不优美……只是想要记录一下,毕竟是除了中国象棋之外自己做出的组合dp第一题~ 首先如果做题做得多,比较熟练的话,应该能一眼看出这题所给 ...

随机推荐

  1. CSharp工程中的几个文件

    以下基于.NET Framework4.6及.NET Core2.0 .csproj 用于配置项目信息,如: 程序集名称.类型 Framework版本 项目所包含的文件信息,如:cs.html.js. ...

  2. C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

    一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简 ...

  3. Get与Post的主要区别

    这里附一篇自己的简短理解 get相对于post更不安全,虽然都可以加密 get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中: 使用post提交的页面在点击[刷新]按钮的时候浏 ...

  4. 写一个可插入自定义标签的 Textarea 组件

    - “插入自定义标签是什么鬼?” - “比如你要插入一个<wise></wise>的标签...” - “什么情况下会有这种需求?” - “得罪了产品的情况下...” 一.需求背 ...

  5. HDU4609 3-idiots(生成函数)

    题意 链接 Sol 这个题就很休闲了.. 首先这是个数数题,我们要求的是\(\frac{\sum{[a_i + a_j > a_k]}}{C_n^3}\) 其中\(a\)按从小到大排序, \(i ...

  6. CSS中默认被继承的属性

    在CSS中,所有属性都可以被继承,只需要显式的设置属性值为inherit即可.如果不设置该属性,CSS大部分属性默认不会从父元素继承而是设置初始值(initial value),但是有一部分属性,默认 ...

  7. Flutter 布局(二)- Padding、Align、Center详解

    本文主要介绍Flutter布局中的Padding.Align以及Center控件,详细介绍了其布局行为以及使用场景,并对源码进行了分析. 1. Padding A widget that insets ...

  8. android修改getprop读取到的ro.build.fingerprint属性

    在build/tools/buildinfo.sh中定义ro.build.fingerprint=$BUILD_FINGERPRINT. 然后在build/core/Makefile中给BUILD_F ...

  9. JavaWeb:servlet实现下载与上传功能

    本文内容: servlet实现下载功能 servlet实现上传功能 首发日期:2018-07-21 servlet实现下载功能 实现流程 1.首先制作一个jsp页面,主要是用来触发下载的.这里可以根据 ...

  10. Key Lookup开销过大导致聚集索引扫描

    以前总结过一篇文章SQL SERVER中什么情况会导致索引查找变成索引扫描 介绍了几种索引查找(Index Seek)变成索引扫描(Index Scan)的情形.昨天写一篇文章的时候,也遇到了一个让人 ...