染色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,上网各种找题解,但发现他们写的都很......反正我作为一个没有接触过状态压缩的,根本看不懂! 然后看了好多状态压缩的题的题解,总结了一下思路,思路很重要,有了思路转换成计算机 ...
随机推荐
- 报错:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
1.问题 写了一个简单的单层神经网络跑mnist手写数字集,结果每次fit都会出现dead kernel 很多dead kernel首先不要急着去网上搜dead kernel怎么解决,因为大家出现的原 ...
- springboot--入门(了解springboot)
个人认为,springboot和maven差不多.maven方便我们管理jar包,而springboot帮助我们简化spring的配置. 未完,待续.......
- 新发布的廉价版iPhoneXR值得购买吗?
每年苹果九月份的发布会,都是一场声势浩大的全民狂欢"大趴体".其中最兴奋的,自然就是各路段子手--就指望着苹果发布会来提供一年的笑料呢!而今年苹果发布会召开之后,网上最流行的就是下 ...
- JavaScript 之 "for"的衍生对象
JavaScript for/in 语句 作用:for/in 语句用于遍历循环对象属性. 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作. 例子: 循环对象属性: var pers ...
- getComputedStyle() 和 getPropertyValue()
// getComputedStyle() 方法用于获取指定元素的 CSS 样式. // 获取的样式是元素在浏览器中最终渲染效果的样式. // getPropertyValue() 方法返回指定的 C ...
- 视频课程 | 云原生下的Serverless浅谈
京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为主题的技术沙龙,现场多位技术大咖与开发者们面对面就Cloud Native进行了深入交流 ...
- ajax+springboot完整例子
1.index.htm <textarea rows="10" cols="60%" id="cover">ss</tex ...
- vue安装插件指定版本
安装插件指定版本 npm install 插件名称@2.9.6 --save 查看需要安装插件的版本记录 npm view 插件名称 versions --json
- day68-CSS-float浮动,clear清除浮动,overflow溢出
1. float 浮动 1.1 在 CSS 中,任何元素都可以浮动. 1.2 浮动元素会生成一个块级框,而不论它本身是何种元素.内联标签设置浮动,就变成了块级标签. 1.3 关于浮动的两个特点: 浮动 ...
- Python 重新加载模块
每个Python文件中的import modulename只被加载一遍,如果在运行过程中,这个Module被更改了,即使在在interpretor中运行import 语句也没用. 可以使用import ...