Circular Coloring
将n个0,m个1进行圆周排列,定义一个排列的权值为圆上所有相邻且相同的数字组成一段的段长的乘积,询问断环成链所有方案的权值之和,\(n,m\leq 5000\)。
解
因为问题与区间划分有关,直接计数不好做,对序列上考虑,不妨设\(f[i][j]\)为前i个元素(相同的)划分j段的权值和,显然有
\]
这个方程是\(O(n^3)\),于是考虑优化,两种方法
法一:
\]
于是我们只要维护\(f[k][j-1]\)和\(kf[k][j-1]\)的前缀和即可,对于式子的优化,通常要分开互不关联的项,或者单独考虑一项的出现次数。
法二:
\]
\]
\]
因此我们只要维护\(f[k][j]\)关于k的前缀和即可,个人更喜欢法二。
显然0的段和1的段数是相同的,这是01序列的一个性质,因此枚举段数,对于\(\sum_{i=1}^{min(n,m)}f[n][i]\times f[m][i]\),实际含义即所有以0的段开头的环对应的0的权值和,而链可以以任意开头,根据其他的题解,容易知道应该乘上一个系数\((n+m)/i\),这个系数我无法给出简单的证明。
参考代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#define il inline
#define ri register
#define ll long long
#define Size 5050
#define yyb 1000000007
using namespace std;
int dp[Size][Size],s[Size],iv[Size];
int main(){
int n,m;iv[1]=1;
for(int i(2);i<=5000;++i)iv[i]=-(ll)yyb/i*iv[yyb%i]%yyb;
for(int i(1);i<=5000;++i)dp[i][1]=i;
for(int i,j(2);j<=5000;++j){
for(i=1;i<j;++i)s[i]=s[i-1]+dp[i][j-1];
for(i=j;i<=5000;++i)
dp[i][j]=(dp[i-1][j]+s[i-1])%yyb,
s[i]=(s[i-1]+dp[i][j-1])%yyb;
}
while(scanf("%d%d",&n,&m)!=EOF){
int ans(0);
for(int i(1);i<=min(n,m);++i)
ans=(ans+(ll)dp[n][i]*dp[m][i]%yyb*(n+m)%yyb*iv[i])%yyb;
printf("%d\n",(ans+yyb)%yyb);
}
return 0;
}
Circular Coloring的更多相关文章
- 湘潭邀请赛 2018 D Circular Coloring
题意: 给一个环,环上有n+m个点.给n个点染成B,m个点染成W.求所有染色情况的每段长度乘积之和. 题解: 染成B的段数和染成W的段数是一样的(因为是环). 第一段是可以移动的,例如BBWWW移动为 ...
- CCPC2018-湖南全国邀请赛 Solution
A - Easy $h$-index 后缀扫一下 #include <bits/stdc++.h> using namespace std; #define ll long long #d ...
- 如何在Spring MVC Test中避免”Circular view path” 异常
1. 问题的现象 比如在webConfig中定义了一个viewResolver public class WebConfig extends WebMvcConfigurerAdapter { //配 ...
- Circular Buffer
From:http://bradforj287.blogspot.com/2010/11/efficient-circular-buffer-in-java.html import java.util ...
- 在.NET Core中遭遇循环依赖问题"A circular dependency was detected"
今天在将一个项目迁移至ASP.NET Core的过程中遭遇一个循环依赖问题,错误信息如下: A circular dependency was detected for the service of ...
- Codeforces Round #369 (Div. 2)---C - Coloring Trees (很妙的DP题)
题目链接 http://codeforces.com/contest/711/problem/C Description ZS the Coder and Chris the Baboon has a ...
- CF149D. Coloring Brackets[区间DP !]
题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1 ...
- Codeforces Round #369 (Div. 2) C. Coloring Trees DP
C. Coloring Trees ZS the Coder and Chris the Baboon has arrived at Udayland! They walked in the pa ...
- Circular progress bar in Unity 3D
Circular progress bar in Unity 3D - UnityScripthttp://stackoverflow.com/questions/22662706/circular- ...
随机推荐
- linux ---pgbouncer的安装和配置
pgbouncer是一款轻量级针对postgresql的数据库连接工具,可以对客户端的连接做限制,防止恶意连接,另外也可以减少数据库的实际连接数,从而减少数据库的开销. 环境: centos 6.5 ...
- Codeforces 1185G2 Playlist for Polycarp (hard version) 背包,暴力
题意及思路:https://www.cnblogs.com/Als123/p/11061147.html 代码: #include <bits/stdc++.h> #define LL l ...
- @PathVariable、@RequestParam、@RequestBody注解
讲解更加详细的参考资料 https://blog.csdn.net/u011410529/article/details/66974974 https://www.cnblogs.com/soul-w ...
- Windows 命令提示符
命令提示符(cmd): 启动:Win+R ,输入cmd回车 切换盘符:盘符名称: 进入文件夹:cd 文件夹名称 进入多级文件夹:cd 文件夹1\文件夹2\文件夹3 返回上一级:cd .. 直接回根路径 ...
- easyui记录
var rows = top.$("#queryDetailGrid").datagird("getRows"); //获取datagird所有行 top.$( ...
- tcpdump使用小记
1, 类型的关键字主要包括:host, net, port: 2, 确定传输方向的关键字主要包括:src, dst, dst or src, dst and src: 3, 协议的关键字主要包括:fd ...
- Shell脚本并发及并发数的控制
https://www.jianshu.com/p/701952ffb755 正常情况下,Shell脚本是串行执行的,一条命令执行完才会执行接下来的命令.如下代码: # !/bin/bash for ...
- RealsenseD415/D435深度相机常用资料汇总
1.Realsense SDK 2.0 Ubuntu 16.04 安装指导网址https://github.com/IntelRealSense/librealsense/blob/master/do ...
- IDEA的骚操作
1.var声明 "jack".var ==>final String name = "jack"; 2.null判空 user.null==>if( ...
- 三种做法:BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster
目录 题意 思路 AC_Code1 AC_Code2 AC_Code3 参考 @(bzoj 2780: [Spoj]8093 Sevenk Love Oimaster) 题意 链接:here 有\(n ...