面试题(状态压缩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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中的泛型(二)

    java中的泛型(二)

    2021年7月5日
    93
  • SSM框架介绍「建议收藏」

    SSM框架介绍「建议收藏」1、SSM框架简介SSM框架是SpringMVC,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,Controller层,Service层,DAO层四层,使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理,Mybatis作为数据对象的持久化引擎。…

    2022年7月12日
    22
  • tkmybatis通用mapper实现在使用Example进行查询的几种方式

    如下列举四种方式,但是不止四种哦。其中weekend方式需要升级jdk到1.8及以上。废话不代码!首先定义数据库表映射类:publicclassMybatisDemo{privateLongid;privateLongcount;privateStringname;publicLonggetId(){…

    2022年4月16日
    204
  • 如何更改pycharm项目路径_怎么修改pycharm文件路径

    如何更改pycharm项目路径_怎么修改pycharm文件路径pycharm中更改python安装路径前言有时python安装的路径不太合适需要重新安装python,如果之前已经安装过pycharm,那么新装python路径发生改变就会使pycharm无法正常使用,需要更改pycharm配置。本文就是记录下pycharm中如何更改python路径。操作方法点击file->Setting依次点击上图按钮选择python新更改的安装路径即可…

    2022年8月28日
    2
  • 技术相关连接

    技术相关连接JavaScript:JavaScript ES6中export及export default的区别 :https://blog.csdn.net/zhou_xiao_cheng/article/details/52759632Vue:从vue新建页面过程看vue项目文件调用关系 :https://blog.csdn.net/weixin_43236610/article…

    2022年6月13日
    24
  • 学习stopwatch

    学习stopwatch处理过程(学习stopwatch)虽然debug可以查看到每一步代码执行时发生的变化,但是不能清楚的看到每一步执行的时间,这个时候Stopwatch就派上用场了。什么是stopwatch?Stopwatch是Guava(Google开源java库)中推出的计时器类,可以用于方便的检测两个代码直接执行的速度Stopwatch简单用法//引入Guava包guava-19.0.jarimpo…

    2022年6月23日
    26

发表回复

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

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