博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3254 Corn Fields 状态压缩
阅读量:6471 次
发布时间:2019-06-23

本文共 1420 字,大约阅读时间需要 4 分钟。

这题对我真的非常难。实在做不出来,就去百度了,搜到了一种状压DP的方法。这是第一种

详细见凝视

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define mod 100000000int n,m,map[15];//map数组用来存图int cnt[10000],dp[15][10000];//cnt存当一层每处都能够放置东西时,全部满足题意的情况int k;bool ok(int x)//推断某种方法是否满足题意{ if(x&(x<<1)) return false; //假设某点左右有点的话,返回false return true;}void find(){ for(int i=0;i<(1<
>n>>m) { memset(map,0,sizeof(map)); for(i=0;i
>temp; if(!temp) map[i]|=1<
另外一种方法是状态压缩+记忆化搜索。这是我从瓜神那看来的记忆化搜索,然后依据我从上个代码中学来的东西改进了下,QAQ。要学的东西还有非常多。慢慢来吧

主要思路是从第一层開始向下搜索,假设搜到符合条件的就继续向下搜索,直到最后一行为止

#include
#include
#include
#include
#include
using namespace std;#define maxn 20#define mod 100000000int map[maxn];int dp[maxn][1<<12];int n,m;bool ok(int i,int state,int cur){ if(map[cur]&i) return false;//推断是否会把东西放在不能放东西的地方 if(i&(i<<1)) return false;//推断东西的左右是否放置了东西 if(cur) { if(state&i) return false;//推断东西的上边是否放置了东西 } return true;}int dfs(int cur,int state){ if(cur==n) return dp[cur][state]=1; if(dp[cur][state]!=-1) return dp[cur][state];//记忆化搜索 int ret=0; for(int i=0;i<(1<
>n>>m; memset(map,0,sizeof(map)); memset(dp,-1,sizeof(dp)); for(int i=0;i
>t; if(!t) map[i]|=1<

转载地址:http://yocko.baihongyu.com/

你可能感兴趣的文章
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>
HTML5新特性教程
查看>>
SpringBoot 实战 (十七) | 整合 WebSocket 实现聊天室
查看>>
ImageOptim-无损图片压缩Mac版
查看>>
12 Go语言map底层浅析
查看>>
vue-resumer 项目中 element-ui 遇到的 textarea autosize 问题
查看>>
以主干开发作为持续交付的基础
查看>>
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
JavaScript函数(二)
查看>>
Airbnb改进部署管道安全性,规范部署顺序
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
当我们谈性能的时候,我们实际上在谈什么?
查看>>
Spring Boot 2.0将会增强Actuator端点的特性
查看>>
i4o开源项目增强LINQ索引功能
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>