COJ 0260 HDNOIP201204四个国王
| HDNOIP201204四个国王 |
| 难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
|
试题描述
|
|
在N*M的棋盘上摆国际象棋中的“国王”。如果两个“国王”占据的格子有公共边或者公共顶点,那么他们就会相互攻击。现在想知道,一共有多少种不同的方法摆上K个互不攻击的国王呢? |
|
输入
|
|
第一行包含三个整数,分别表示N、M和K。
|
|
输出
|
|
输出一个整数,表示方法数。若超过2147483647,你只用输出2147483648即可。
|
|
输入示例
|
|
样例输入1
3 3 4 样例输入2 |
|
输出示例
|
|
样例输出1
1 样例输出2 |
|
其他说明
|
|
第一个样例只有一种可能:
XOX OOO XOX X表示一个国王,O表示一个空格子。 第二个样例的方法数显然多于2147483647。 对70%的数据,N<=5,M<=5,0<=K<=4, |
题解:妈妈呀好题!
"n小思状压,网格用层次",所以很容易得出DP:f[i][j][k]表示前i列放j个国王且第i列状态为a[k]的放法总数
转移:f[i][j][k]=sum(f[i-1][j-b[s_now]][s_think]) (j∈ok_set)
那么肿么求ok_set呢?暴力init就行,如果追求完美可以打表哦~
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,maxm=+,maxs=,maxt=,inf=-1u>>;
long long f[maxn][maxm][maxs],sum;
int a[maxt]={,,,,,,,,,,,,},b[maxt]={,,,,,,,,,,,,},p[]={,,,,,};
int w[]={,,,,},c,n,m,k;bool g[maxt][maxt];
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
while(isdigit(ch))x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
void init(){
n=read();m=read();k=read();
if(!k||n<=||m<=){write();return;}
for(int i=;i<p[n]-;i++)
for(int j=i+;j<p[n];j++){
if(a[i]&a[j]) continue;
int d;for(d=;d<;d++)if(w[d]&a[i]){
if(d<&&(w[d+]&a[j]))break;
if(d>&&(w[d-]&a[j]))break;
}if(d>)g[i][j]=g[j][i]=true;
}g[][]=true;
for(int i=;i<p[n];i++)f[][b[i]][i]=(b[i]<=k);
return;
}
void work(){
for(int i=;i<=m;i++)
for(int j=;j<=k;j++)
for(int c=;c<p[n];c++)
for(int d=;d<p[n];d++)if(g[c][d]&&j>=b[c])
f[i][j][c]+=f[i-][j-b[c]][d];
return;
}
void print(){
for(int j=;j<p[n];j++){
sum+=f[m][k][j];
if(sum>inf){puts("");return;}
}write(sum);
return;
}
int main(){init();work();print();return ;}
COJ 0260 HDNOIP201204四个国王的更多相关文章
- COJ 0986 WZJ的数据结构(负十四) 区间动态k大
题解:哈哈哈我过了!!!主席树+树状数组写起来还真是hentai啊... 在这里必须分享我的一个沙茶错!!!看这段代码: void get(int x,int d){ ]=root[x];x;x-=x ...
- 【转载】许纪霖教授在上海财经大学演讲——漫谈“大学生的四个Learn”
这几年,越来越多的大学毕业生抱怨找不到合意的工作.很多单位又感叹,找一个称职的大学生真难.这就形成一个非常大的反差和矛盾.那么,社会究竟需要怎样的大学生?我们的大学到底应该培养怎样的大学生?我们作为大 ...
- Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat
Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 ...
- Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
Atitit <摩奴法典>overivew 读后感 不是由国王 颁布的,而是 僧侣编制 1. <摩奴法典>是印度最古老的一部法律文献.该法典不是由国王或立法机关制定颁布的,而是 ...
- BZOJ4654/UOJ223 [Noi2016]国王饮水记
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 思想者:漫谈大学生的四个LEARN
核心提示:哪四个Learn呢?Learn to learn(学习怎样学习),Learn to be(学习怎样做人),Learn to do(学习怎样做事),Learn totogether(学习 ...
- 宣化上人: 大佛顶首楞严经四种清净明诲浅释(8-9)(转自学佛网:http://www.xuefo.net/nr/article23/230825.html)
大佛顶首楞严经四种清净明诲浅释(8) 唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 各自谓己得上人法.詃惑无识.恐令失心.所过之处.其家耗散. 各自谓己:每一个都是自己称赞 ...
- 宣化上人:大佛顶首楞严经四种清净明诲浅释(10-11) -------------------------------------------------------------------------------- (转自学佛网:http://www.xuefo.net/nr/article23/230920.html)
大佛顶首楞严经四种清净明诲浅释(10) 唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 是故阿难.若不断偷修禅定者.譬如有人.水灌漏卮.欲求其满.纵经尘劫.终无平复. 是故阿 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
随机推荐
- JDBC batch批处理Statement executeBatch 具体解释
JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系 ...
- 百度——LBS.云 v2.0——创建自己的地理云数据
随着云技术和地理信息(GIS)技术的发展,今年终于进入了.地理分享的新纪元.百度提供了LBS的云存储.真是个不错的功能.下面让我们来看看如何使用吧. 1.注册百度开发者账号(此处略去88个字) 2.创 ...
- Android app内语言环境切换
逻辑很简单: 1 app内所有activity继承自BaseActivity或BaseActivity派生出来的子类,BaseActivity中维护了一个静态的 app Activity访问栈,在创 ...
- java Serializable和Externalizable序列化反序列化详解--转
一.什么是序列化? “对象序列化”(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存 ...
- linux 声音大小调整的命令
alsamixer 输入上面的命令 回车即可看到图形界面,界面如下 ┌──────────────────────────── AlsaMixer v1.0.27.1 ──────────────── ...
- 数据库连接超时和go away、如何检测数据库的最大连接数
搜索连接bi库超时 数据库连接超时 go away go away和连接超时之间的关系是什么? 写一个例子测试一下. 如何检测数据库的最大连接数
- 关于服务器防火墙和discuz论坛的问题
今天做了一个b2b商城,其中的论坛用的是discuz论坛 .net版本,主页要取出其中三个板块的最新帖子数据,安装好后,帖子数据在dnt_posts1数据表里,其中的tid为外链表dnt_forums ...
- android获取在res文件下的图片资源
//得到该图片的id(name 是该图片的名字,"drawable" 是该图片存放的目录,getPackageName()是应用程序的包) int resID = getResou ...
- 在vim中设置 '打印时间'的快捷键.
在 ~/.vimrc (没有该文件可以手动创建)中输入 map <F4> <Esc>:r !date<CR> 实现在 '一般模式'状态点击 F4时,自动在vim中打 ...
- java socket报文通信(三)java对象和xml格式文件的相互转换
前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...