染色dp(确定一行就可行)
题:https://codeforces.com/contest/1027/problem/E
题意:给定n*n的方格,可以染黑白,要求相邻俩行”完全“不同或完全相同,对于列也是一样。然后限制不能拥有k面积具有相同颜色的格子
分析:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e3+;
const int mod= ;
ll dp[M][M];///前i个存在最多连续j个相同的格子颜色
void init(){
dp[][]=1ll;
dp[][]=1ll;
for(int i=;i<=;i++){
dp[i][i]=dp[i-][i-]*2ll%mod;///因为[i][i]就相当于没限制 ,所以直接每个位置俩个选择
dp[][i]=1ll;
}
for(int i=;i<=;i++){
for(int j=;j<=i;j++){
dp[j][i]=dp[j][j];///不受限制的部分
}
///当前的j位置,可以选择与前一个位置相同,也可以选择与后一个相同
///若选择不相同,那么就在这个位置的贡献加上前一个位置的dp值
///若选择相同,那么就把这个位置和前一个位置看出一整体,然后重复上述动作;
for(int j=i+;j<=;j++)
dp[j][i]=(2ll*dp[j-][i]%mod-dp[j-i-][i]+mod)%mod; }
}
int main(){
init();
int n,k;
cin>>n>>k;
ll ans=;
for(int i=;i<=n;i++){
ll temp=dp[n][i]-dp[n][i-];
temp=temp*(dp[n][min((k-)/i,n)])%mod;
ans=(ans+temp)%mod;
}
ans*=;
cout<<ans%mod<<endl;
return ;
}
题:https://codeforces.com/contest/1248/problem/C
题意:黑白染色,限制:每个单元格最多具有一个相同颜色的相邻单元格
分析:确定了一行一列就可定下整个图
考虑dp[i][0]为第i个填白色的方案数 所以易得:dp[i][0]=dp[i-2][0]+dp[i-1][1]
考虑dp[i][1]为第i个填黑色的方案数 所以易得:dp[i][1]=dp[i-2][1]+dp[i-1][0]
直接合并:dp[i]=dp[i-1]+dp[i-2];
#include <bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
typedef long long ll;
const int M=1e5+;
const int mod=1e9+;
ll f[M];
int main(){
int n,m;
scanf("%d%d",&n,&m);
f[]=;
f[]=;
fo(i,,max(n,m))
f[i]=(f[i-]+f[i-])%mod;
printf("%I64d",((f[n]+f[m])%mod-+mod)%mod);///又因为当行和列拼在一起时会导致格子(1,1),(1,2),(2,1) 三个格子同色,所以我们的答案是f(N)+f(M)−2。 return ;
}
染色dp(确定一行就可行)的更多相关文章
- Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
#include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...
- 【xsy1172】 染色 dp
题目大意:现有$n$条排成一行的木板,每个木板有一个目标颜色.你每次能将一个区间内的木板分别染成它们的目标颜色,而这次染色的代价为这个区间内不同目标颜色的木板的数量的平方.问将全部木板染成目标颜色的最 ...
- BZOJ:2958 序列染色 DP
bzoj2958 序列染色 题目传送门 Description 给出一个长度为N由B.W.X三种字符组成的字符串S,你需要把每一个X染成B或W中的一个. 对于给出的K,问有多少种染色方式使得存在整数a ...
- 【POJ 1112】Team Them Up!(二分图染色+DP)
Description Your task is to divide a number of persons into two teams, in such a way, that: everyone ...
- poj-1112 (二分图染色+dp分组)
#include <iostream> #include <algorithm> #include <cstring> using namespace std; ; ...
- 5.29 省选模拟赛 树的染色 dp 最优性优化
LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...
- bzoj2958: 序列染色(DP)
2958: 序列染色 题目:传送门 题解: 大难题啊(还是我太菜了) %一发大佬QTT 代码: #include<cstdio> #include<cstring> #incl ...
- DP学习记录Ⅰ
DP学习记录Ⅱ 前言 状态定义,转移方程,边界处理,这三部分想好了,就问题不大了.重点在状态定义,转移方程是基于状态定义的,边界处理是方便转移方程的开始的.因此最好先在纸上写出自己状态的意义,越详细越 ...
- 【原创】【状态压缩DP】POJ3254 Corn Fields【新手向】
一开始根本不会状压dp,上网各种找题解,但发现他们写的都很......反正我作为一个没有接触过状态压缩的,根本看不懂! 然后看了好多状态压缩的题的题解,总结了一下思路,思路很重要,有了思路转换成计算机 ...
随机推荐
- Zxing和QR Code生成和解析二维码
本文是学习慕课网课程<Java生成二维码>(http://www.imooc.com/learn/531)的笔记. 一.二维码的分类 线性堆叠式二维码.矩阵式二维码.邮政码. 二.二维码的 ...
- JS-语句二
for循环的4个要素: 1.初始值 2.条件判断 3.状态改变 4.循环体 for循环的写法: for(var i=0;i>10;i++) ...
- JSP变量、方法和类的声明,JSP程序片,JSP表达式
参考文章 http://c.biancheng.net/view/1431.html http://c.biancheng.net/view/1433.html http://c.biancheng. ...
- swoole怎么连接数据库
异步连接到MySQL服务器. $serverConfig为MySQL服务器的配置,必须为关联索引数组 $callback连接完成后回调此函数 swoole连接数据库实例: 推荐学习:swoole教程 ...
- .equal()和==的区别
1.首先,equal和==最根本的区别在于equal是一个方法,而==是一个运算符. 2.一般来说,==运算符比较的是在内存中的物理地址,.equal()比较的是哈希算法值是否相等(即hashcode ...
- shell 实现war包的配置更新和自动发布
此脚本主要用来实现非maven tomcat项目的war包手动发布, 1.将测试war包上传至指定目录 2.备份目前生产代码 3.自动配置文件替换 4.新版本代码的发布 #!/bin/bash ### ...
- Java 面向对象异常处理,finally,覆盖时异常特点,package,import,包之间的访问(10)
Java 面向对象异常处理, finally:final 关键字的用法参考http://www.cnblogs.com/itcqx/p/5541659.html 覆盖时异常特点,package,imp ...
- 为什么常用 Map<> map = new HashMap()
在初学Java的时候,经常能看到教材上的写法,使用了接口Map来引用一个map,而不是它的具体实现,那么这样做的好处是什么呢? <Effective Java>第52条:通过接口引用对象 ...
- dfs--八皇后问题
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合法的放置方法. 因为我们 ...
- PDO是一个“数据库访问抽象层”
PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高 ...