HDNOIP201204四个国王
难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

在N*M的棋盘上摆国际象棋中的“国王”。如果两个“国王”占据的格子有公共边或者公共顶点,那么他们就会相互攻击。现在想知道,一共有多少种不同的方法摆上K个互不攻击的国王呢?

输入
第一行包含三个整数,分别表示N、M和K。
输出
输出一个整数,表示方法数。若超过2147483647,你只用输出2147483648即可。
输入示例
样例输入1
3 3 4

样例输入2
5 100 50

输出示例
样例输出1
1

样例输出2
2147483648

其他说明
第一个样例只有一种可能:
XOX
OOO
XOX
X表示一个国王,O表示一个空格子。
第二个样例的方法数显然多于2147483647。

对70%的数据,N<=5,M<=5,0<=K<=4,
对另外30%的数据,N<=5,M<=100,0<=K<=N*M

题解:妈妈呀好题!

"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四个国王的更多相关文章

  1. COJ 0986 WZJ的数据结构(负十四) 区间动态k大

    题解:哈哈哈我过了!!!主席树+树状数组写起来还真是hentai啊... 在这里必须分享我的一个沙茶错!!!看这段代码: void get(int x,int d){ ]=root[x];x;x-=x ...

  2. 【转载】许纪霖教授在上海财经大学演讲——漫谈“大学生的四个Learn”

    这几年,越来越多的大学毕业生抱怨找不到合意的工作.很多单位又感叹,找一个称职的大学生真难.这就形成一个非常大的反差和矛盾.那么,社会究竟需要怎样的大学生?我们的大学到底应该培养怎样的大学生?我们作为大 ...

  3. 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 手写文字识别   ...

  4. Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制

    Atitit <摩奴法典>overivew 读后感 不是由国王 颁布的,而是 僧侣编制 1. <摩奴法典>是印度最古老的一部法律文献.该法典不是由国王或立法机关制定颁布的,而是 ...

  5. BZOJ4654/UOJ223 [Noi2016]国王饮水记

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. 思想者:漫谈大学生的四个LEARN

     核心提示:哪四个Learn呢?Learn to learn(学习怎样学习),Learn to be(学习怎样做人),Learn to do(学习怎样做事),Learn totogether(学习 ...

  7. 宣化上人: 大佛顶首楞严经四种清净明诲浅释(8-9)(转自学佛网:http://www.xuefo.net/nr/article23/230825.html)

    大佛顶首楞严经四种清净明诲浅释(8) 唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 各自谓己得上人法.詃惑无识.恐令失心.所过之处.其家耗散. 各自谓己:每一个都是自己称赞 ...

  8. 宣化上人:大佛顶首楞严经四种清净明诲浅释(10-11) -------------------------------------------------------------------------------- (转自学佛网:http://www.xuefo.net/nr/article23/230920.html)

    大佛顶首楞严经四种清净明诲浅释(10) 唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 是故阿难.若不断偷修禅定者.譬如有人.水灌漏卮.欲求其满.纵经尘劫.终无平复. 是故阿 ...

  9. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

随机推荐

  1. 拖数据库到x-code常见错误

    拖进去之后,用本地读取的方式读不到路径,重新拖一次,并且把Add to targets 里面的勾勾上

  2. 递归实现生成Grey码

    腾讯2016研发笔试题1: 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码. 给定一个整数n, ...

  3. 《火球——UML大战需求分析》(第1章 大话UML)——1.4 如何学好UML?

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  4. valgrind 的使用及错误信息分析

          这里记录一下使用valgrind查找你的应用程序中的各种潜在的错误信息,并举例说明. 经常使用valgrind查找一下你的代码的内存有关错误,对移植到嵌入系统后的系统稳定性来说有着重要的意 ...

  5. 第三章:真正弄清楚一个Mod的组织结构

    <基于1.8 Forge的Minecraft mod制作经验分享> 首先看看一个mod的文件结构,懂Java的应该都看得懂: src/main/ --java/com.xxxxxxxx.x ...

  6. 底层restful接口修改分析

    记录接口调用次数,接口调用时间需求. 需要修改公共的类,就是restful接口,可以认为是底层的代码,具体的实现有哪些?插入数据库肯定不能影响性能.

  7. tomcat startup.sh提示java.lang.OutOfMemoryError: PermGen space

    JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m"if [ -z "$LOGGING_MANAGER& ...

  8. C# Html网页生成图片解决方案1

    1.使用System.Windows.Forms命名空间下的WebBrowser控件加载网页并生成图片 GiHub参考地址: https://github.com/tianma3798/FileOpa ...

  9. expr的简单应用

    expr命令 是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串. –格式为: expr expression_r(命令读入Expression 参数 ...

  10. mysql存储过程controller的not found造成混乱的解决办法

    打草稿 问题:对于select  var1 into var2 ,单select的结果为空的时候(空的意思是没有找到数据,不是该值为null) ,会触发controller的not found 当游标 ...