首页 > 其他分享 >24.8.18 DP训练

24.8.18 DP训练

时间:2024-08-18 09:49:35浏览次数:10  
标签:24.8 int 18 long include DP

A - Mondriaan's Dream

求用 \(1\times 2\) 的小矩形填满 \(n\times m\) 的矩形的方案数

sol

数据范围超级小,考虑状压

记录 \(st_i\) 表示 \(i\) 这个二进制状态下的连续 \(0\) 长度是否存在奇数

设 \(dp_{i,j}\) 表示到第 \(i\) 列,且在 \(j\) 中 \(1\) 的位置和 \(i+1\) 列放了横的小方块

然后转移见代码

#include<cstdio>
#include<iostream>
#define int long long
using namespace std;
const int N=13,L=1<<12;
int dp[N][L];
bool st[L];
int n,m;
void init(){
    for(int i=0;i<(1<<n);i++){
        int cnt=0;
        st[i]=1;
        for(int j=0;j<n;j++){
            if(i&(1<<j)){
                if(cnt&1) break;
                cnt=0;
            }
            else cnt++;
        }
        if(cnt&1) st[i]=0;
        for(int j=1;j<=m;j++) dp[j][i]=0;
    }
}

signed main(){
    while(1){
        cin>>n>>m;
        if(n*m%2==1){
            cout<<0<<"\n";
            continue;
        }
        if(n==0 and m==0) return 0;
        init();
        dp[0][0]=1; 
        for(int i=1;i<=m;i++){
            for(int j=0;j<(1<<n);j++){
                for(int k=0;k<(1<<n);k++){
                    if((j&k) or !st[j|k]) continue;
                    dp[i][j]+=dp[i-1][k];
                }
            }
        }
        cout<<dp[m][0]<<"\n";
    }
}

标签:24.8,int,18,long,include,DP
From: https://www.cnblogs.com/exut/p/18365277

相关文章

  • 24/8/18算法笔记 MBPO算法
    MBPO(Model-BasedPolicyOptimization)是一种先进的强化学习算法,它结合了模型预测和策略优化的思想来提高学习效率和性能。这种算法特别适用于连续动作空间的问题,它通过建立一个环境的动态模型来进行模拟预测,并利用这些预测来改进策略。MBPO的核心包括以下几个步骤:模型学习:通......
  • NuxtI18n
    [PS]自写这篇文档的时候,这个模块还在开发当中,没有稳定的正式版本发布,但是开放了edge通道,经测试可以正常使用。官方文档[安装及配置准备]安装模块npxnuxi@latestmoduleaddi18n配置nuxt模块,nuxt.config.tsmodules:[['@nuxtjs/i18n',{......
  • 2024.8 #6
    T1.[AGC060F]SpanningTreesofIntervalGraph我们令\(S=\sumC_{i,j}\)。我们设两个矩阵\(B_{i,j}=[[L_i,R_i]\cap[L_j,R_j]]\)以及\(A_{i,i}=\sumB_{i,j}\)。那么根据矩阵树定理,我们知道生成树的数量就是\(\det(A-B)\)。然而直接高斯消元复杂度是\(O(S^3......
  • 2024.8.17
    DATE#:20240817ITEM#:DOCWEEK#:SATURDAYDAIL#:捌月拾肆TAGS <BGM="快哉风--黄金玉米王"><theme=oi-language><theme=oi-graphtheory><[空]><[空]>取次花丛懒回顾,半缘修道半缘君--元稹《离思五首·其四》[P4208[JSOI2008]最......
  • 2024.8.17 鲜花
    コネクト交(か)わした约束(やくそく)忘(わす)れないよ『无法忘却彼此结下的约定』kawashitayakusokuwasurenaiyo目(め)を闭(と)じ确(たし)かめる『轻闭双眼再次确认』mewotojitashikameru押(お)し寄(よ)せた闇(やみ)振(ふ)り払(はら)って进(すす)むよ『驱......
  • [考试记录] 2024.8.17 csp-s模拟赛21
    T1Set解析思考+组合题场上只能想到暴力01背包再加上bitset优化,很好打。本应该有60pts(?或者更多),不曾想由于spj的一些未知原因喜提systemerror,全部cancelled。喜提0pts。......
  • dp题单vjudge 8.17
    HDU-1024MaxSumPlusPlushttps://acm.hdu.edu.cn/showproblem.php?pid=1024可以想到用dp过,但是无论时间和空间都不够,然后就不会了https://www.cnblogs.com/wuwangchuxin0924/p/6546901.html先写出转移方程,然后发现如果把其中一部分用其他的东西储存起来,就不需要重复寻找,直......
  • 状压DP 前置 位运算
    功能1:判断一个数字\(x\)二进制下第\(i\)位是不是等于\(1\)if((1<<(i-1))&x)将1左移i-1位,相当于制造了一个只有第i位上是1,其他位上都是0的二进制数。然后与x做与运算如果结果\(>0\)说明x第i位上是1,反之是0功能2:将一个数字x二进制下第i位更改成1x=x|(1<<(i-1))......
  • 《python语言程序设计》2018版第7章第06题代数:平方根 设计一个名为QuadraticEquation
    类代码部分classQuadraticEquation:def__init__(self,a,b,c):self.a=aself.b=bself.c=cdefset_a(self,a):self.a=adefget_a(self):returnself.adefset_b(self,b):self......
  • 《python语言程序设计》2018版第7章第05题几何:正n边形,一个正n边形的边都有同样的长度
    结果和代码这里只涉及一个办法方法部分defmain():rX,rY=eval(input("Enterregularpolygonxandyaxis:"))regular_num=eval(input("Enterregularnumber:"))side_long=eval(input("Entersidenumber:"))a=exCode07.Reg......