C++ 洛谷 P2704 [NOI2001]炮兵阵地
P2704 [NOI2001]炮兵阵地
没学状压DP的看一下
此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵。
在做此题前,先做一下玉米田
玉米田题解
分析:
而m即一行的个数小于等于10,每个格子上只有防或不放两种情况
很自然就会想到状压DP
还有一点很重要:
要符合题目条件的 只有平原可以放炮兵。
所以还要匹配 炮兵放法与平原 的关系(一共要判断3种,PH,列列列,横横横)。
如下是DP思考过程:(和玉米田差不多)
我们需要考虑定义,我们可以定义dp[i][j][k]表示到第i行状态为j,且上一行状态为k时的最大方案数
然后我们要来考虑初始化,因为状态肯定由前两行推过来,所以我们需要单独处理第一二行的方案数
取最大的话就一定要和 原来的自己、前一个状态+增长 比较,取较大的那个
最后还有一个问题,数组dp[105][1024][1024]!!!!这空间超400MB啊!
所以还得优化空间。
滚动数组:因为当前状态只与前两行有关,所以只需保留有用的三行
dp[105][1024][1024] --> dp[3][1024][1024] 好很多了(已经不爆了,但我们要做到最优,这是OIer的信念)
预处理:实际上没有几种情况是可以满足横排的(m = 10时,70个不到),于是我们就可以把这些满足条件的保存下来。~~~
dp[3][1024][1024] --> dp[3][70][70]
代码:
#include<cstdio> #include<iostream> using namespace std; const int maxn=101; int n,m; int st[70],sum[70]; int cnt; int dp[3][70][70]; int map[maxn]; int ans=0; void init(int s,int tot,int i) {if(i>=m){st[++cnt]=s;sum[cnt]=tot;//printf("st=%d sum=%d\n",st[cnt],sum[cnt]);return;}init(s,tot,i+1);init(s+(1<<i),tot+1,i+3); } void add() {for(int i=1;i<=cnt;i++){//printf("st=%d map=%d ",st[i],map[0]);if(!(map[1]&st[i])){dp[1][i][0]=sum[i];//printf("%d\n",dp[1][i][0]); }//printf("sum=%d %d\n",sum[i],dp[0][i][0]); }for (int i=1;i<=cnt;i++){if(!(st[i]&map[2]))for (int j=1;j<=cnt;j++)if((!(st[j]&map[1]))&&(!(st[i]&st[j]))){dp[2][i][j]=sum[i]+sum[j];//printf("i=%d j=%d %d\n",st[i],st[j],dp[2][i][j]); }} } void come_dp() {for (int i=3;i<=n;i++){for (int j=1;j<=cnt;j++){if(!(st[j]&map[i]))for (int k=1;k<=cnt;k++)if((!(st[k]&map[i-1]))&&(!(st[k]&st[j]))){for (int u=1;u<=cnt;u++)if((!(st[u]&map[i-2]))&&(!(st[u]&st[j]))&&(!(st[u]&st[k])))dp[i%3][j][k]=max(dp[i%3][j][k],dp[(i-1)%3][k][u]+sum[j]); }}} } void work() {scanf("%d%d",&n,&m);for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){char x;cin>>x;map[i]<<=1;if(x=='H') map[i]+=1;} }//printf("%d\n",map[1]);init(0,0,0);add();come_dp();for (int i=1;i<=cnt;i++)for (int j=1;j<=cnt;j++)ans=max(ans,dp[n%3][i][j]);printf("%d",ans); } int main() {work();return 0; }
逃qaq
转载于:https://www.cnblogs.com/mzyczly/p/10886670.html
C++ 洛谷 P2704 [NOI2001]炮兵阵地相关推荐
- 洛谷 P2704 [NOI2001]炮兵阵地
题目 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P& ...
- 洛谷P2704 [NOI2001]炮兵阵地(状压dp)
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P&quo ...
- 洛谷 P2704 炮兵阵地 题解
洛谷 P2704 炮兵阵地 题解 洛谷 P2704 题目 司令部的将军们打算在NNNMMM的网格地图上部署他们的炮兵部队.一个NNNMMM的地图由NNN行MMM列组成,地图的每一格可能是山地(用&qu ...
- jzoj1768,P2704,POJ1185-[NOI2001]炮兵阵地【状态压缩dp】
正题 POJ链接:http://poj.org/problem?id=1185 jzoj链接:https://jzoj.net/senior/#main/show/1768 洛谷评测记录:https: ...
- 洛谷p2704 炮兵阵地
典型的状态压缩题,只是要定义dp[i][j][k], #include<bits/stdc++.h>using namespace std; int n,m,state[1<< ...
- [NOI2001]炮兵阵地
Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示), 也可能是平原(用&q ...
- 2022-5-20 吃月饼(something wrong), 数塔取数问题, 制铁棒, 子段统计, 炮兵阵地
1. 吃月饼 有一块月饼,是正三角形的,又被分割成了许多块小正三角形的月饼,里面有若干块被吃掉了.现在想要在这块月饼中再找一个由小正三角形月饼的正三角形月饼,而且要求面积最大的. 样例解释: 大月饼的 ...
- 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II
文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
最新文章
- js中JSON.stringify用于自定义的类
- Scikit-learn使用总结
- linux命令gen,Linux中msgen命令起什么作用呢?
- SAP Business One
- 从编码层面对比java和c#
- 2017.9.19 禁忌 失败总结
- sap期初导资产代码_SAP S/4固定资产导入期初科目设置
- 高通平台Android源码bootloader分析之sbl1(二)
- 各种浏览器网页背景颜色护眼设置
- Excel 2016添加复选框
- YARN ACCEPTED: waiting for AM container to be allocated, launched and register with RM.
- 机电一体化综合实训考核装置
- ArcGIS 切片/瓦片的发布与加载
- ffmpeg裁剪视频画面
- php 函数索引 中文索引
- css3论坛,css3学习参考手册
- Win10+Ubuntu18.04双系统安装教程
- 学计算机当导演吗,学计算机8年 80岁老荣民当“导演”
- android 电路模拟器,仿真电路模拟器(专业版)
- SQLite 安装与使用
热门文章
- JenKins自动化构建部署流程参考
- 游戏安全报告(2017 - 2018全年)
- 【Node】新手入门 基于Express,Sequelize、IIS的MVC项目
- GitHub使用流程、初学者的使用方法
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- 【学习笔记】HTML基础:使用html制作网页
- 使用RMAN创建复制数据库
- ZeroMQ接口函数之 :zmq_msg_get - 获取消息的性质
- 《硝烟中的Scrum和XP》学习手札
- Zookeeper集群详解