面试题(状态压缩dp)

面试题(状态压缩dp)题解状态压缩dp,f[i][j]代表第i行状态为j的方案数#include<bits/stdc++.h>using namespace std;#define x first#define y second#define send string::npos#define lowbit(x) (x&(-x))#define left(x) x<<1#define right(x) x<<1|1#define transformu(s) tr..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这里插入图片描述
在这里插入图片描述
题解
状态压缩dp,f[i][j]代表第i行状态为j的方案数


#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define send string::npos
#define lowbit(x) (x&(-x))
#define left(x) x<<1
#define right(x) x<<1|1
#define transformu(s) transform(s.begin(), s.end(), s.begin(), ::toupper)
#define transformd(s) transform(s.begin(), s.end(), s.begin(), ::tolower)
typedef long long ll;
typedef pair<long long,long long> PII;
typedef pair<double,double>PDD;
typedef struct Node * pnode;
const long long N = 1e3  + 10;
const long long M = 4 * N;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const long long Mod = 4e8;
const long long INF = 0x3f3f3f3f;
const double eps = 1e-6;
PII g[N * N ];
int a[N];
int cnt = 0;
int f[2][N * N];
int z[N];
int n;
bool check(int x){ 
   
    int a = g[x].x,b = g[x].y;
    for(int i = a;i <= a + b - 1;i ++){ 
   
        if(z[i] == 0)return false;
    }
    return true;
}
int main(){ 
   
    cnt ++;
// cout<<cnt<<endl;
    cin>>n;
    for(int len = 1;len <= n;len ++){ 
   
        for(int i = 0;i <= n - len;i ++){ 
   
            g[cnt].x = i,g[cnt].y = len;
            cnt ++;
        }
    }
// cout<<cnt<<endl;
    char x;
    f[0 & 1][0] = 0;
    for(int i = 1;i <= n + 1;i ++){ 
   
        memset(z,0,sizeof z);
        for(int j = 0;j < n && i != n + 1;j ++){ 
   
            cin>>x;
            if(x == '.')z[j] = 1;
        }
// for(int j = 0;j < n;j ++)cout<<z[j]<<endl;
        for(int j = 0;j < cnt;j ++){ 
   
            if(check(j) && j != 0){ 
   
                f[i & 1][j]  = f[(i - 1) & 1][j] + 1;
            }
            else if(j != 0){ 
   
                f[i & 1][j] = 0;
            }
            else if(j == 0){ 
   
                for(int k = 0;k < cnt;k ++)
                f[i & 1][j] += f[(i - 1) & 1][k];
                cout<<f[i & 1][j]<<endl;
            }
        }
    }
// cout<<n + 1<<endl;
    cout<<f[(n + 1) & 1][0]<<endl;
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168842.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月9日 上午11:00
下一篇 2022年8月9日 上午11:00


相关推荐

  • 104规约 scada

    104规约 scada104规约的报文帧分为三类:I帧、S帧和U帧。I帧称为信息帧,长度一定大于6个字节,被称作长帧,用于传输数据;S帧称为确认帧,长度只有6个字节,被称作短帧,用于确认接收的I帧;U帧称为控制帧,长度只有6个字节,也被称作短帧,用于控制启动/停止/测试。长帧报文分为APCI和ASDU两个部分,而短帧报文只有APCI部分。APCI的6个字节是这样构成的:起动字符68H,1个字节;后面的报文长

    2022年6月20日
    74
  • navicat 15 mac激活码[最新免费获取]

    (navicat 15 mac激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~CIOU…

    2022年3月26日
    61
  • 即梦AI正版

    即梦AI正版

    2026年3月12日
    2
  • Matlab贝塞尔函数(Bessel)实现

    Matlab贝塞尔函数(Bessel)实现贝塞尔函数 Besselfuncti 是数学上的一类特殊函数的总称 通常单说的贝塞尔函数指第一类贝塞尔函数 Besselfuncti 贝塞尔函数的具体形式随上述方程中任意实数或复数 变化而变化 相应地 被称为其对应贝塞尔函数的阶数 实际应用中最常见的情形为 是整数 n 对应解称为 n 阶贝塞尔函数 尽管在上述微分方程中 本身的正负号不

    2026年3月16日
    2
  • java实现完全跨域SSO单点登录

    java实现完全跨域SSO单点登录java 实现 SSO 什么是 SSOSSO SingleSignOn 单点登录是实现多个系统之间统一登录的验证系统 简单来说就是 有 A B C 三个系统 在 A 处登录过后 再访问 B 系统 B 系统就已经处于了登录状态 C 系统也是一样 举个生活中栗子 你同时打开天猫和淘宝 都进入 login 界面 都要求你登录的 现在你在淘宝处登录后 直接在天猫处刷新 你会发现 你已经登录了 而且就是你在淘宝上登录的用户

    2026年3月19日
    2
  • 带有小数点补码计算

    带有小数点补码计算计算机中为了使计算更加高效的快捷 一般采用补码进行运算 补码格式正数 3 补码 0011 原码 0011 反码 0011 负数 3 补码 1101 反码 1100 原码 1011 当数据位小数时 1 25 原码 1001 0100 反码 1110 1011 补码 1110 1100 3 75 原码 0011 1100 反码 0011 1100 补码 0011 1100 1 25 3 75 2 50 1110 1100

    2026年3月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号