一本通1592【例 1】国王
1592:【例 1】国王
时间限制: 500 ms 内存限制: 65536 KB
【题目描述】
原题来自:SGU 223
在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。
【输入】
只有一行,包含两个整数 n 和 k。
【输出】
每组数据一行为方案总数,若不能够放置则输出 0。
【输入样例】
3 2
【输出样例】
16
【提示】
样例输入 2
4 4
样例输出 2
79
数据范围与提示:
对于全部数据,1≤n≤10,0≤k≤n2 。
sol:我自己的做法很劣,几乎是所有提交里最慢的,my:预处理暴力枚举两条边上的状态看看是否可转移,然后n*m*2n*2n,这居然过了,我也是醉了
#include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read() {ll s=0;bool f=0;char ch=' ';while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}while(isdigit(ch)){s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}return (f)?(-s):(s); } #define R(x) x=read() inline void write(ll x) {if(x<0){putchar('-');x=-x;}if(x<10){putchar(x+'0');return;}write(x/10);putchar((x%10)+'0');return; } inline void writeln(ll x) {write(x);putchar('\n');return; } #define W(x) write(x),putchar(' ') #define Wl(x) writeln(x) const int N=15; int n,m,Ges[(1<<10)+5]; ll dp[N][N*N][(1<<10)+5]; bool Can[(1<<10)+5][(1<<10)+5],Jud[(1<<10)+5]; int main() {int i,j,k,ii,jj;R(n); R(m);for(i=0;i<(1<<n);i++){bool bo=1;for(j=2;j<=n&&bo;j++) if((i&(1<<(j-2)))&&(i&(1<<(j-1)))) bo=0;Jud[i]=bo;}for(i=0;i<(1<<n);i++) if(Jud[i]){for(j=0;j<(1<<n);j++) if(Jud[j]){bool bo=1;if(i&(1<<(1-1))) if((j&(1<<(1-1)))||(j&(1<<(2-1)))) bo=0;for(k=2;k<n&&bo;k++) if(i&(1<<(k-1))){if((j&(1<<(k-2)))||(j&(1<<(k-1)))||(j&(1<<(k)))) bo=0;}if(i&(1<<(n-1))) if((j&(1<<(n-2)))||(j&(1<<(n-1)))) bo=0;if(bo) Can[i][j]=1;}}for(i=0;i<(1<<n);i++){Ges[i]=0;for(j=1;j<=n;j++) if(i&(1<<(j-1))) Ges[i]++;dp[1][Ges[i]][i]=1;}for(i=2;i<=n;i++){for(j=0;j<=m;j++){for(ii=0;ii<(1<<n);ii++) if(dp[i-1][j][ii]&&Jud[ii]){for(jj=0;jj<(1<<n);jj++) if(Can[ii][jj]&&j+Ges[jj]<=m&&Jud[jj]){dp[i][j+Ges[jj]][jj]+=dp[i-1][j][ii];}}}}ll ans=0;for(i=0;i<(1<<n);i++) ans+=dp[n][m][i];Wl(ans);return 0; } /* input 3 2 output 16input 4 4 output 79 */
View Code
肯定有更优的解法,(同种做法不可能差70ms),但我不知道qaq
转载于:https://www.cnblogs.com/gaojunonly1/p/10363376.html
一本通1592【例 1】国王相关推荐
- 【算法•日更•第十四期】信息奥赛一本通1592:【例 1】国王题解
废话不多说,直接上题: 1592:[例 1]国王 时间限制: 500 ms 内存限制: 65536 KB 提交数: 290 通过数: 111 [题目描述] 原题来自:SGU 2 ...
- 一本通【例4-10】最优布线问题
题目链接 http://ybt.ssoier.cn:8088/problem_show.php?pid=1349 问题描述 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被 ...
- 信奥一本通-动态规划-例9.2-数字金字塔-方法四-逆推法代码实现
#include<bits/stdc++.h> using namespace std;int main(){//x y分别为行列int x, y;//金字塔的高度int n;cin &g ...
- 爱好数学的国王 C++
Z 国的国王是一个非常爱好数学的国王.一天他对着他的那些大臣说:"素数真是一种神奇的正整数, 除了 1 和它本身外,不能被其他任何正整数整除, 2 是最小的素数,有无穷多个啊--它还有一个美 ...
- 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划
例1 骑士(Sgu223) 1592:[例 1]国王 信息学奥赛一本通(C++版)在线评测系统 https://blog.csdn.net/guoyangfan_/article/details/82 ...
- 你的软件也能挣钱 共享软件走向国际指南
共享软件为何要走向国际? 理由很简单,不少人做共享软件走国际路线,月入数万美元,而同样软件走国内路线恐怕很难达到这个数.(原因大家都知道) 软件开发三个永恒的主题是: 一.软件的功能及创意 二.软件的 ...
- 共享软件为何要走向国际--月光博客
吾阅:该文章转自月光博客: --------------------------------------------------------------------------- 转自:http:// ...
- 一个小兔子的大数据见解2
Big Data 阿里的大数据解决方案 MAXCOMPUTE DATAWORKS QUICKBI 1.Vmware增强 2. 1.1.VMware 虚拟网络设备 1.1.1.虚拟网卡.虚拟交换机 虚拟 ...
- 《Java150道面试题全集》
本文转载他人,自留作笔记用,请尊重原创作者. 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两 ...
最新文章
- C语言数组栈怎么实现删除,C语言静态数组实现栈操作
- libcudart.so.10.0: cannot open shared object file: No such file or directory
- 【深度学习】Transformer在语义分割上的应用探索
- python 加注拼音-又一个奇葩要求,Python是如何将“中文”转“拼音”的?
- .net 导出html 到excel 合并单元格,C#导出Excel,并且设置Excel单元格格式,合并单元格....
- 手把手教你使用VS制作winform安装包
- JPG各种输入框样式
- Java程序编译的几个方法(编辑器Notepad++)
- QIcon 给按钮和动作添加图片
- Hexo博客搭建图文教程
- 鸿蒙OS比fuchsia的优势,第一天带你走进华为开发者大会,了解鸿蒙OS
- 神经网络算法识别手写数字minst
- tecplot360 2015 R1读abaqus后处理文件
- In-band network telemetry
- jQuery fsBanner 手风琴
- 神奇的 toLocaleString
- html5网页中用video标签无法播放MP4视频的解决方法
- 【3维视觉】DCC-DIF复现,超详细避坑指南
- 个人征信报告解析(机构版)
- 计算机组装已维护的学术报告,计算机组装与维护中的问题及解决对策分析
热门文章
- 一个月薪10000的北京程序员的真实生活
- mysql多列索引(组合索引)特点和使用场景
- 使用VRRP技术实现网关设备冗余,附详细配置实验
- EngineerCMS利用梦想CAD控件MXdraw进行图纸在线编辑,保存到服务器
- 网络爬虫学习1 - 使用 requests.get(url) 抓取网页
- 软件测试寻找测试点的思维角度有哪些方面?
- Android5.0,6.0,7.0,8.0新特性整理
- MySQL数据库时间和jdbc查询时间相差12小时问题解决
- Java批量建立文件夹
- AcWing 204. 表达整数的奇怪方式