博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ - 1246 Colorful Board(DP+组合数)
阅读量:6300 次
发布时间:2019-06-22

本文共 1248 字,大约阅读时间需要 4 分钟。

题意

有个(M+1)*(N+1)的棋盘,用k种颜色给它涂色,要求曼哈顿距离为奇数的格子之间不能涂相同的颜色,每个格子都必须有颜色,问可行的方案数。

分析

经一波分析,根据曼哈顿距离为奇数这一信息,可以将棋盘分为两部分,也就是相邻格子不能有相同颜色。一种颜色只能在一个部分中出现。现在考虑对一个部分的格子操作,

dp[i][j]表示i个格子选择用了j种颜色的方案数,于是可以得到这样的递推式:dp[i][j]=dp[i-1][j-1]*j+dp[i-1][j]*j。得到dp数组后还不够,需要枚举两个部分使用的颜色数,两层循环,其中选择颜色的方案数则用组合数来算。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,e) for(int i=0;i<(e);i++)#define rep1(i,e) for(int i=1;i<=(e);i++)#define repx(i,x,e) for(int i=(x);i<=(e);i++)#define X first#define Y second#define PB push_back#define MP make_pair#define mset(var,val) memset(var,val,sizeof(var))#define scd(a) scanf("%d",&a)#define scdd(a,b) scanf("%d%d",&a,&b)#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)#define pd(a) printf("%d\n",a)#define scl(a) scanf("%lld",&a)#define scll(a,b) scanf("%lld%lld",&a,&b)#define sclll(a,b,c) scanf("%lld%lld%lld",&a,&b,&c)#define IOS ios::sync_with_stdio(false);cin.tie(0)using namespace std;typedef long long ll;template
void test(T a){cout<
<
void test(T a,T2 b){cout<
<<" "<<
void test(T a,T2 b,T3 c){cout<
<<" "<<<" "<
<

 

转载于:https://www.cnblogs.com/fht-litost/p/9313240.html

你可能感兴趣的文章
微信小程序制作-随笔2
查看>>
Python 学习日记 第八天
查看>>
通过telnet命令查看memcache运行状态
查看>>
HTTP协议
查看>>
nyoj 715 Adjacent Bit Counts
查看>>
[转] JavaScript:彻底理解同步、异步和事件循环(Event Loop)
查看>>
jQuery基础:keydown( ) 与 keypress( ) 区别
查看>>
electron 开发环境搭建
查看>>
使用MEF实现通用参数设置
查看>>
修改头像,存入后台
查看>>
嵌入式开发之davinci--- 8148/8168/8127 中的图像缩放sclr、swms之后出现图像视频卡顿、屏幕跳跃的问题...
查看>>
矩阵指数函数
查看>>
60阶单群同构于A5的证明
查看>>
[emuch.net]MatrixComputations(1-6)
查看>>
递归.
查看>>
C/C++基础问题归集
查看>>
Eclipse RCP开发桌面程序
查看>>
R语言-文本挖掘 主题模型 文本分类
查看>>
NIO - Scatter/Gather
查看>>
Jenkins入门总结
查看>>