小国王(状压dp经典题)

简介: 小国王(状压dp经典题)
#include <bits/stdc++.h>
using namespace std;
int n, m;
const int N = 15;
long long dp[N][1100][1 << 13]; //目前的行 选了多少个 目前状态
vector<int>v;//每行压缩航的合法状态
int check(int x)
{
  int res = 0;
  for (int i = 0; i <= 31; i++)
  {
    if (x >> i & 1) res++;
  }
  return res;
}
int main()
{
  cin >> n >> m;
  int ans = 0;
  for (int i = 0; i < (1 << n); i++)
  {
    if ((i & (i << 1)) == 0)
    {
      v.push_back(i);
    }
  }
  int len = v.size();
  //for(int i=0;i<len;i++)
  //dp[1][check(v[i])][i]=1;
  dp[0][0][0] = 1;
  for (int i = 1; i <= n + 1; i++)
  {
    for (int l = 0; l <= m; l++)
      for (int j = 0; j < len; j++)
      {
        for (int k = 0; k < len; k++)
        {
          if (v[j]&v[k]) continue;
          int t = v[j] | v[k];
          if (t & (t << 1)) continue;
          if (l - check(v[j]) < 0) continue;
          dp[i][l][j] += dp[i - 1][l - check(v[j])][k];
        }
      }
  }
  cout << dp[n + 1][m][0] << endl;
}
目录
相关文章
|
5月前
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
70 0
|
6月前
|
机器学习/深度学习 算法 C++
【动态规划】C++算法:403.青蛙过河
【动态规划】C++算法:403.青蛙过河
|
算法 Java 测试技术
LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
67 0
LeetCode 周赛上分之旅 #46 经典二分答案与质因数分解
过河卒-蓝桥杯-动态规划
过河卒-蓝桥杯-动态规划
128 0
|
算法 C++ Python
【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?
【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?
107 0
|
算法 C++
蓝桥杯(聪明的猴子)克鲁斯卡尔算法最小生成树
蓝桥杯(聪明的猴子)克鲁斯卡尔算法最小生成树
108 0
|
算法 JavaScript 前端开发
日拱算法:解两道“杨辉三角”题
什么是“杨辉三角”,想必大家并不陌生~~ 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
|
算法
【递归与递推】洛谷[NOIP2002 普及组] 过河卒
前言 本题来自洛谷P1002. 题目链接:[NOIP2002 普及组] 过河卒 - 洛谷
225 0
(数论)蓝桥杯AcWing 1205. 买不到的数目
(数论)蓝桥杯AcWing 1205. 买不到的数目
47 0
|
机器学习/深度学习 算法
<<算法很美>>——(六)——回溯算法(下)—N皇后问题
<<算法很美>>——(六)——回溯算法(下)—N皇后问题
<<算法很美>>——(六)——回溯算法(下)—N皇后问题
下一篇
无影云桌面