codeforces 111C(状压DP)

思路:数据范围很小,考虑用状压来做...这类网格放东西问题其实dp大概都可做。

  把问题转化为蜘蛛移动后,每个点上下左右和本身至少有一个网格有蜘蛛。

  首先取n,m的较小值作为列数,较大值作为行数,对每行进行状压(即用一个二进制数表示),0表示没有蜘蛛,1表示有蜘蛛。

  用dp[i][j][k]表示当前处理第i行,且第i行状态为j,第i+1行状态为k时,前i行的空网格数。

  那么只要逐行枚举j:0~(1<<(m-1)) - 1,k:0~(1<<(m-1)) - 1,再枚举i+2行的状态L:0~(1<<(m-1)) - 1

  然后检查第i+1行的可行性,(若发现某个位置自己和上下左右五个网格均无蜘蛛则不可行),DP转移方程:

  dp[i+1][k][L] = max(dp[i+1][k][L],dp[i][j][k] + Get(k));    其实:Get(k)就是获取k的二进制中有多少位为0。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <stack>
 9 #include <queue>
10 #include <string>
11 #include <iostream>
12 #include <algorithm>
13 using namespace std;
14 
15 #define MEM(a,b) memset(a,b,sizeof(a))
16 #define REP(i,n) for(int i=1;i<=(n);++i)
17 #define REV(i,n) for(int i=(n);i>=1;--i)
18 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
19 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
20 #define MP(a,b) make_pair(a,b)
21 
22 typedef long long ll;
23 typedef pair<int,int> pii;
24 const int INF = (1 << 30) - 1;
25 
26 int n,m,ans,top;
27 int dp[45][100][100];
28 
29 bool Check(int j,int k,int l){
30     int a,b,c,d,e;
31     FOR(i,0,n - 1){
32         a = j & (1 << i);
33         b = k & (1 << i);
34         c = l & (1 << i);
35         d = (i == 0) ? 0 : (k & (1 << (i - 1)));
36         e = (i == n - 1) ? 0 : (k & (1 << (i + 1)));
37         if(!(a || b || c || d || e)) return false;
38     }
39     return true;
40 }
41 
42 int Get(int v){
43     int cnt = 0;
44     FOR(i,0,n - 1) cnt += !(v & (1 << i));
45     return cnt;
46 }
47 
48 int main(){
49     scanf("%d%d",&n,&m);
50     if(n > m) swap(n,m);
51     top = (1 << n) - 1;
52     FOR(i,0,top) FOR(j,0,top) dp[0][i][j] = -INF;
53     FOR(i,0,top){
54         dp[0][0][i] = 0;
55     }
56     FOR(i,0,m){
57         FOR(j,0,top) FOR(k,0,top) FOR(l,0,top){
58             if(Check(j,k,l)){
59                 dp[i + 1][k][l] = max(dp[i + 1][k][l],
60                         dp[i][j][k] + Get(k));
61                 //printf("dp[%d][%d][%d]:%d -> %d\n",i,j,k,dp[i][j][k],l);
62             }
63         }
64     }
65     FOR(i,0,top) ans = max(ans,dp[m][i][0]);
66     printf("%d\n",ans);
67     return 0;
68 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4261254.html

Codeforces 932E Team Work(推式子 dp) 快乐写式子 题目 简要题意 求 ∑i=0nCniik\bm{\sum_{i=0}^{n}C_{n}^{i}i^k}∑i=0n​Cni​ik (n<=1e9,k<=5000)(n<=1e9,k<=5000)(n<=1e9,k<=5000) 题解 二次项定理 (1+x)n=∑i=0nCnixi\bm{(1+x)^n=\sum_{i=0}^{n}C_{n}^{i}x^i}(1+x)n=∑i=0n​Cni​xi 要求的式子和式子右边很像,考虑怎么把右边凑出iii,两边同时求导:n 阅读详情

相关推荐

NXP S32K3 Safety软件生态全解析:RTD、SPD、SAF、SCST到底怎么选?

本文深入解析NXP S32K3系列MCU的安全软件生态,详细对比RTD、SPD、SAF和SCST四大组件的功能定位与选型策略。针对不同ASIL等级需求,提供从架构设计到工程实践的完整解决方案,帮助开发者高效实现功能安全认证,优化汽车电子系统的安全性与可靠性。

weixin_42524226的博客 323

Codeforces 1550 E. Stringforces —— 状压DP

This way 题意: 现在有一个字符串,只包含小写英文的前k位和’?’。定义fif_ifi​表示字符串中仅包含字母i的最长连续子串长度。 字符串的值是fi∣(i∈[1,k])f_i|(i∈[1,k])fi​∣(i∈[1,k])的最小值。问你字符串的值最大是多少。 题解: 那么首先看到最小值最大就大致猜测到是一个二分,而且这显然满足二分的性质。 我们二分出当前的答案之后怎么去检验,一开始我是想着dp[i]表示到了第i个位置的时候,已有的字母集合。但是敲到一半的时候突然反应过来到了相同的点,字母集合可能不

天翼之城的博客 465

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 555

CodeForces-580D(状压dp)

【代码】CodeForces-580D(状压dp)

justhereforstudy的博客 295

LinuxMint 22.1(Ubuntu24.04)下通过Wine完美运行同花顺远航版的实战指南

本文详细介绍了在LinuxMint 22.1(Ubuntu24.04)系统下通过Wine完美运行同花顺远航版的实战指南。从基础环境准备到深度优化,包括Wine环境配置、同花顺远航版安装、字体显示调优、任务栏兼容性修复等关键步骤,帮助Linux用户高效使用同花顺远航版进行股票交易和行情分析。

weixin_30919429的博客 571

2024年中科大分子生物研究生考试建议

分子生物学复习资料及往年考题。

qq_43337249的博客 2951

Codeforces53 E. Dead Ends(状压dp)

【代码】Codeforces53 E. Dead Ends(状压dp)

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 177

windows10 + wsl2安装docker

一、安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 1.1以管理员身份运行powershell 1.2执行如下命令 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 1.3重启电脑 1.4 重启电脑后,如果需要安装wsl2, 则安装官方文档继续后续操作,因我...

happytree001的博客 1569

Codeforces Beta Round 11 D. A Simple Task 【状压DP + 环计数】

个人练习记录

m0_73500785的博客 1024

解决RocketMQ中@Bean配置DefaultMQProducer时的MQClientException问题

本文针对Spring Boot整合RocketMQ时,因在@Bean配置中手动调用DefaultMQProducer的start()方法而引发的MQClientException问题,深入剖析了其根本原因在于生命周期管理冲突。文章提供了简洁有效的解决方案——移除手动启动,让Spring容器自动管理,并给出了完整的配置示例与生产环境最佳实践。

rnn9storyteller的博客 688

西电计科数据库系统期末复习笔记

本人西电19计科,数据库系统98,这是复习期间整理的笔记,基本涵盖了课程全部重点,有需要的学弟学妹可以在复习的时候参考一下。

Polaris的博客 8596

Codeforces 111C Petya and Spiders (状压dp)

一个 \(n*m\) 的棋盘,一开始每个格子都有一个蜘蛛,你可以对每个蜘蛛向四个方向移动,或者不动;问最多能够有多少个格子没有蜘蛛 \(n*m<=40\),侧面推导发现 \(min(n,m) \le 6\) 显然把十字架形的蜘蛛移到一个格子最优 在不同的棋盘形态十字架的摆放却不尽相同 能否贪心? 好像不行 数据范围如此之小,那么可否考虑状压 \(dp\) ? \(dp[i][j][...

weixin_30681121的博客 144

Calibre:LVS 快速debug short/open技巧

用Fix Suggestion和Short Isolate两种方法debug LVS问题

m0_61544122的博客 7460

CodeForces 111 C.Petya and Spiders(状压DP)

Description 给出一个n×mn×mn\times m的矩阵,每个位置有一只蜘蛛,每秒蜘蛛会向上下左右移动一步或者待在原地不动,问一秒后没有蜘蛛的位置数量最大值 Input 两个整数n,m(1≤n,m,n⋅m≤40)n,m(1≤n,m,n⋅m≤40)n,m(1\le n,m,n\cdot m\le 40) Output 输出没有蜘蛛位置数量最大值 Sample Input 1...

ZSQ 534

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Educational Codeforces Round 111 (Rated for Div. 2)

Educational Codeforces Round 111 (Rated for Div. 2) 题号 题目 知识点 A Find The Array B Maximum Cost Deletion C Manhattan Subarrays D Excellent Arrays E Stringforces F Jumping Around

qq_35975367的博客 187

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Codeforces Round #585 (Div. 2) E】Marbles【状压DP】

题意: 有一个 nnn 个数字的序列,数字范围在 1~201~201~20 之间,现在要对这些数字进行重新排列,使得相同数字出现在一个连续区间,如 113322113322113322、222222334442222223344422222233444 都是符合题意的序列。重新排列这个序列的操作只有交换两个相邻的数字,现问最少需要交换多少次可以使这个序列变成符合题意的序列。(2≤n≤4∗105)(...

lucius-liu.cn 871

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CodeForces - 1523D Love-Hate(随机数+状压dp)

题目链接:点击查看 题目大意:给出 nnn 个 010101 序列表示二进制状态,问选择至少 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉ 个状态进行位运算的与运算后得到的答案中,111 的位数最多的答案 题目分析:考虑最后需要求得的答案,一定是 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉ 个状态中,其中一个状态的子集,于是我们就可以去枚举然后统计答案 考虑随机数,每随机抽一个状态,不在最后 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉ 个

Falcon的博客 739

Codeforces Round 938 (Div. 3)(A,B,C,D,E,F,G,H)

Codeforces Round 938 (Div. 3)(A,B,C,D,E,F,G,H)

qq_45809243的博客 1180

CodeForces - 111C Petya and Spiders

博主的 BiBi 时间 博主现在在高铁上辽,不过这次的座位玄学变成了卧铺 QwQ\mathtt{QwQ}QwQ。(幸好对面的漂酿小姐姐提醒有充电头,不然只有和黑屏的电脑相对无言,,,岂不美哉?) Solution 具体肯定是状压某行,一眼望去发现 n,m≤40n,m \leq 40n,m≤40 觉得搞不动,但是仔细想想发现 n,mn,mn,m 交换对解题没有影响,又有 n∗m≤40n * m\leq 40n∗m≤40,可以得出 min⁡(n,m)≤6\min(n,m)\leq 6min(n,m)≤6,这就可

Oxide‘s Blog 299

Codeforces Round 926 (Div. 2)(A,B,C,D,E,F)

Codeforces Round 926 (Div. 2)(A,B,C,D,E,F)

qq_45809243的博客 2228

Codeforces 429C Guess the Tree(状压DP+贪心)

吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子; 以节点 $ i $ 为根的子树中必须包含 $ c_i $ 个节点。 给出 $ n (n<=24)$ 和 $ c_i $ ,问是否存在符合条件的树。 分析 看到数据范围,第一时间想到的方法应该是状压DP,用数 $ s $ 表示已经被选入子...

weixin_30485291的博客 285

Codeforces Round #723 (Div. 2) 题解A-C2

A. Mean Inequality 分析:很简单的构造。 代码: #include <iostream> #include <algorithm> #include <vector> using namespace std; const int N = 100; int a[N], b[N]; int main() { int t; cin >> t; while(t--) { int n; cin >>

Arctic_Clam的博客 463

Codeforces 1498C - Planar Reflections (DP)

CodeCraft-21 and Codeforces Round #711 (Div. 2) C. Planar Reflections 题意 假设现在有nnn个平面,从左到右排列 现有一个衰变年龄为kkk的粒子从最左端向右发射 如果一个粒子碰到了一个平面,它将会不改变衰变年龄保持运动方向并传过这个平面 如果这个粒子的衰变年龄大于111,那么将会分裂出一个衰变年龄为k−1k-1k−1的往相反方向运动的粒子 给定nnn和kkk,问这个空间最终会有多少个粒子,答案对109+710^9+7109+7取模 限制

StelaYuri's Blog 718

CodeForces 1457C Bouncing Ball

CodeForces 1457C Bouncing Ball 题目大意: 给定一个 010101 串,有一个小球落到 ppp 点, 然后往前跳 kkk 步,一直跳下去直到跳出串的长度,小球只能落到 111 上面。你可以花费 xxx 秒把一个 000 改变成 111,或者花费 yyy 秒删除第一字符,然后其他字符往前移动一个单位。 问你最少需要多少秒才能保证小球可以跳出字符串。 思路: 看到这题就立马想到了 dpdpdp,然后就构思状态转移方程,一开始是构想 dp[i][0/1]dp[i][0/1]dp[i]

想学开哥的博客 314

Codeforces Round 937 (Div. 4)(A,B,C,D,E,F,G)

Codeforces Round 937 (Div. 4)(A,B,C,D,E,F,G)

qq_45809243的博客 2062
上一篇: codeforces #288 E(区间DP)
下一篇: Ural 1002(KMP,DP)
dingdi3021
博客等级 码龄11年 1粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值