美文网首页信息学竞赛题解(IO题解)
BZOJ-1087: [SCOI2005]互不侵犯King(状压

BZOJ-1087: [SCOI2005]互不侵犯King(状压

作者: AmadeusChan | 来源:发表于2018-10-16 20:10 被阅读0次

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1087

先把每行所有的状态DFS出来,然后DP即可。

代码(第一次的状压DP写的很丑。。。):

#include <cstdio>
#include <algorithm>
#include <cstring>
 
using namespace std;
 
#define MAXN 10
#define MAXM 10010
#define MAXK 100
#define check(x,y) ((!(x&y)))&&(!((x<<1)&y))&&(!((x>>1)&y))
 
int count(int x) {
    int rec=0;
    for (int i=x;i;i>>=1) if (i&1) rec++;
    return rec;
}
 
int n,k,St[MAXM],N=0;
 
void dfs(int x,int y) {
    St[++N]=x;
    if (y>n) return ;
    for (int i=y;i<=n;i++) dfs(x^(1<<(n-i)),i+2);
}
 
long long f[MAXN][MAXM][MAXK];
 
int main() {
    scanf("%d%d",&n,&k);
    dfs(0,1);
    memset(f,0,sizeof(f));
    for (int i=0;i++<N;) if (count(St[i])<=k) f[1][i][count(St[i])]=1;
    for (int i=1;i++<n;) {
        for (int a=0;a++<N;) for (int b=0;b<=k;b++) {
            for (int c=0;c++<N;) {
                if (check(St[a],St[c])&&b>=count(St[a])) {
                    f[i][a][b]+=f[i-1][c][b-count(St[a])];
                }
            }
        }
    }
    long long ans=0;
    for (int i=0;i++<N;) ans+=f[n][i][k];
    printf("%lld\n",ans);
    return 0;
}

相关文章

  • BZOJ-1087: [SCOI2005]互不侵犯King(状压

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1087 先...

  • 题解 [SCOI2005] 互不侵犯King (状压DP)

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右...

  • 状压DP

    最短Hamilton路径 原题链接[https://www.acwing.com/activity/content...

  • 状压DP系列

    几点注意: 1.数组下标从1开始比较方便 zoj Easy 2048 Again保存状态的时候是保存下降子序列的情...

  • LeetCode 状压dp

    5639. 完成所有工作的最短时间[https://leetcode-cn.com/problems/find-m...

  • DP训练——状压DP

    状压DP BZOJ1087题意在的棋盘里面放个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以...

  • 2019-04-12

    土豆+蛋炒饭+油,压成饼状

  • 状态压缩和状压DP

    问题:n*n的棋盘放置n个点,保证每一行,每一列都有且只有一个点,有几种放置方式? 一、组合数解法:ans=n!二...

  • week8&9_状压

    week8清掃衛生.連續M個位置上清掃不超過Q個位置情況下得到的最大價值;我的想法是這樣:保留前M個位置是否清掃T...

  • POJ 3311 floyd+压状DP

    poj3311因为这道题 点N 不超过10 可以 把状态转化 为 二进制数,0表示没经过这个点,1表示经过这个点。...

网友评论

    本文标题:BZOJ-1087: [SCOI2005]互不侵犯King(状压

    本文链接:https://www.haomeiwen.com/subject/tvhkzftx.html