[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. 数据结构——基于java的链表实现(真正理解链表这种数据结构)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10759599.html,否则将追究法律责任!!! 一.链表介绍 1.什么是链表? 链表是一 ...

  2. vim 中:wq和:wq的不同之处

  3. 浅析多线程的对象锁和Class锁

    一.前言 本来想在另外一篇文章说的,发现可能篇幅有点大,所以还是另开一篇博文来说好了.知识参考<Java多线程编程核心技术>,评价下这本书吧——大量的代码,简单的说明,真像在看博客.不过这 ...

  4. Elasticsearch(ES)API 增删查改常用操作

    常用操作 查询所有数据 POST http://192.168.97.173:27009/logstash_test_2018/doc/_search { "query": { & ...

  5. 12个必备的JavaScript装逼技巧

    译者按: 无论你是初学者还是资深人士,都值得一读! 原文: 12 Amazing JavaScript Shorthand Techniques 译者: Fundebug 为了保证可读性,本文采用意译 ...

  6. POJ3734 Blocks(生成函数)

    题意 链接 长度为\(n\)的序列,用红黄蓝绿染色,其中红黄只能是偶数,问方案数 Sol 生成函数入门题 任意的是\(e^x\),偶数的是\(\frac{e^x + e^{-x}}{2}\) 最后化完 ...

  7. 2018-11-27 中文代码示例之Programming in Scala笔记第七八章

    续前文: 中文代码示例之Programming in Scala学习笔记第二三章 中文代码示例之Programming in Scala笔记第四五六章. 同样仅节选有意思的例程部分作演示之用. 源文档 ...

  8. mybatis 自动生成文件配置

    maven 依赖配置: <!-- sql server --><dependency> <groupId>com.microsoft.sqlserver</g ...

  9. 29.Odoo产品分析 (四) – 工具板块(2) – 搜索和仪表盘(1)

    查看Odoo产品分析系列--目录 "项目管理"是一个用于管理你的项目,且将它们与其他应用关联起来的非常灵活的模块,他允许您的公司管理项目阶段,分配团队,甚至跟踪与项目相关的时间和工 ...

  10. Android 直接修改dex破解

    直接修改dex破解 一.编写一个简单的验证程序 (1)MainActivity: protected void onCreate(BundlesavedInstanceState) { super.o ...