洛谷——P1896 [SCOI2005]互不侵犯
P1896 [SCOI2005]互不侵犯
状压DP入门题
状压DP一般需要与处理状态是否合法,节省时间
设定状态dp[i][j][k]表示第i行第j个状态选择国王数为k的方案数
$dp[i][j][num[j]+p]+=dp[i-1][k][p]$
转移方程如上,表示第i行第j个状态国王数量为$num[j]+p$由上一行第k个状态的p个国王转移而来
状压DP的一般套路不就是将数的二进制表示成状态,如1010(10)10这个数就表示第一个位置放,第二个不放,以此类推
预处理:判断这一行的国王是否冲突,i&(i<<1) 想象成二进制,将i左移一位与i比较判断国王是否相邻
如何判断上下两行国王是否冲突呢?
x&y判断上下是否冲突
x&(y<<1) 判断左上右下是否冲突
x&(y>>1) 判断右上左下是否冲突
#include<bits/stdc++.h> #define LL long long
using namespace std; LL MAX,n,m,dp[][][],can[],num[],tot,ans; LL getsum(LL x){
LL cnt=;
while(x) cnt+=(x&),x>>=;
return num[tot]=cnt;
} int main()
{
scanf("%lld%lld",&n,&m);
MAX=(<<n)-;
for(LL i=;i<=MAX;i++) {
if(!(i&(i<<))) can[++tot]=i,dp[][tot][getsum(i)]=;
}
for(LL i=;i<=n;i++){
for(LL j=;j<=tot;j++){
LL x=can[j];
for(LL k=;k<=tot;k++){
LL y=can[k];
if((x&y)||(x&(y<<))||(x&(y>>))) continue;
for(LL p=;p<=m;p++)
dp[i][j][num[j]+p]+=dp[i-][k][p];
}
}
}
for(LL i=;i<=tot;i++) ans+=dp[n][i][m];
printf("%lld\n",ans);
return ;
}
洛谷——P1896 [SCOI2005]互不侵犯的更多相关文章
- 洛谷 P1896 [SCOI2005]互不侵犯
洛谷 P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8 ...
- 洛谷P1896 [SCOI2005]互不侵犯King
P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...
- 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)
洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...
- 洛谷 P1896 [SCOI2005]互不侵犯 (状态压缩DP)
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 注:数据有加强(2018/4/25) ...
- 洛谷 P1896 [SCOI2005]互不侵犯King
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出格式 输入格式: 只有一行,包 ...
- 洛谷P1896 [SCOI2005]互不侵犯King【状压DP】
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式: 只有一行,包含两个数N,K ...
- BZOJ1087=Codevs2451=洛谷P1896&P2326互不侵犯
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2885 Solved: 1693[Submit][ ...
- 【洛谷P1896】互不侵犯
题目大意:给定 N*N 的棋盘,一共放 K 个国王,一共有多少种方法. 题解: i&i<<1 判断是否每个 1 的位置之间都有 0. i&j<<1 判断 i 中 ...
- P1896 [SCOI2005] 互不侵犯 方法记录
原题链接 [SCOI2005] 互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
随机推荐
- HDU 4249 A Famous Equation(数位DP)
题目链接:点击打开链接 思路:用d[i][a][b][c][is]表示当前到了第i位, 三个数的i位各自是a,b,c, 是否有进位 , 的方法数. 细节參见代码: #include<cstdio ...
- LeetCode 242. Valid Anagram (验证变位词)
Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...
- ORA-00904:"T1"."AREA_ID" :标识符无效
1.错误描写叙述 ORA-00904:"T1"."AREA_ID" :标识符无效 00904 . 00000 - "%s:invalid identi ...
- unity3D游戏开发实战原创视频讲座系列11之相扑游戏开发并公布到Win\WP8
解说文件夹 第一讲 游戏的演示和资源介绍 第二讲 场景的建设 第三讲 玩家的移动 第四讲 对手的AI(让对手动起来) 第五讲 游戏的管理(上) 第六讲 游戏的管理(下) 第七讲 公布到Win8系 ...
- 自己定义 View 基础和原理
课程背景: 在 Android 提供的系统控件不能满足需求的情况下,往往须要自己开发自己定义 View 来满足需求,可是该怎样下手呢.本课程将带你进入自己定义 View 的开发过程,来了解它的一些原理 ...
- BNU 13024 . Fi Binary Number 数位dp/fibonacci数列
B. Fi Binary Number A Fi-binary number is a number that contains only 0 and 1. It does not conta ...
- research plan
- ios7--UIImageView
// // ViewController.m // 03-UIImageView的使用 // #import "ViewController.h" @interface ViewC ...
- 怎么让frameset出现整体滚动条
a.html<!DOCTYPE html> <html> <head> <title></title> </head> < ...
- androd基础入门---1环境
1.项目结构特性 2.模拟器设置 3.编译器的下载 直接点击运行即可