链接

思路借鉴了这个博客

我们可以想到状压dp

用一个十进制数来表示状态,即第i位表示位置i处的物品等级

用f[i][j][k]表示第i天,仓库的物品等级为j,状态为k时的最大收益

但是状态数貌似很多,开不下,同时上面的式子好像不太好转移

我们可以预处理出所有的合法状态,即无法消除的状态,然后在预处理出所有状态可能的转移,即枚举空位放那些等级的物品,用e[i][j][k]表示状态i,在第k个空位填等级为j的物品会转移到的状态编号,dis[i][j][k]表示这种转移所得到的收益,这样就方便转移了

注意到我们还要考虑到仓库中的物品,即会有f[i][j][k]转移到f[i][0][s]的情况,所以我们枚举第二维的顺序应该是倒序枚举(即最后考虑f[i][0]的状态)

细节有点多,注意不要写挂

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring> using namespace std; const int mn = ;
const int maxn = ;
const int mx = ;//状态总数 char s[maxn];
int n,m,a[mn],b[mn],cnt,g[maxn];
int sit[mn],id[];
int e[mx][mn][mn],dis[mx][mn][mn],head[mx]; int xiao(int *a,int pos,int &val)
{
val=;
while(a[pos])
{
int tmp=a[pos],l=pos,r=pos;
while(a[l]==a[l-] && l>) l--;
while(a[r]==a[r+] && r<n) r++;
if(l==r) break;
val+=(r-l+)*(<<tmp);
for(int i=l;i<=r;i++)
a[i]=;
a[pos]=(tmp+)%;
}
int tmp=;
for(int i=;i<=n;i++)
tmp=tmp*+a[i];
if(!id[tmp]) id[tmp]=++cnt;
return id[tmp];
} void dfs(int x)
{
//printf("%d\n",x);
if(x>n)
{
int now = xiao(a,,b[]);
for(int i=;i<=n;i++)
{
if(!a[i])
{
++head[now];
for(int j=;j<=;j++)
{
for(int k=;k<=n;k++)
b[k]=a[k];
b[i]=j;
e[now][j][head[now]] = xiao(b,i,dis[now][j][head[now]]);
}
}
}
return ;
}
for(int i=;i<=;i++)
{
if(x== || !a[x-] || !i || a[x-]!=i)
{
a[x]=i;
dfs(x+);
}
}
}
int f[maxn][mn][mx];
int dp()
{
memset(f,-,sizeof(f));
int ans=;
f[][][]=;
for(int i=;i<=m;i++)
for(int k=;k>=;k--)
for(int j=;j<=cnt;j++)
{
if(f[i][k][j]>=)
{
if(i<m)
{
for(int s=;s<=head[j];s++)
f[i+][k][e[j][g[i+]][s]]=max(f[i+][k][e[j][g[i+]][s]],f[i][k][j]+dis[j][g[i+]][s]);
}
if(k)
{
for(int s=;s<=head[j];s++)
f[i][][e[j][k][s]]=max(f[i][][e[j][k][s]],f[i][k][j]+dis[j][k][s]);
}
else f[i+][g[i+]][j]=max(f[i+][g[i+]][j],f[i][k][j]);
ans=max(ans,f[i][k][j]);
}
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",s+);
for(int i=;i<=m;i++)
g[i]=s[i]-'';
dfs();
printf("%d\n",dp());
return ;
}

BZOJ 4420二重镇题解的更多相关文章

  1. BZOJ 1003 物流运输 题解 【SPFA+DP】

    BZOJ 1003 物流运输 题解 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的 ...

  2. BZOJ 1191 超级英雄 Hero 题解

    BZOJ 1191 超级英雄 Hero 题解 Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金 ...

  3. bzoj 4822~4824 CQOI2017题解

    老C的任务 题目大意: 维护一个二维平面,初始给出一些点及其权.多次询问某个矩形内的权和. n,m <= 100000 题解: 签到题. CDQ水一水. #include <cstdio& ...

  4. SDOI 2018二轮题解(除Day2T1)

    博主诈尸啦 虽然一轮之后就退役了但是二轮还是要去划划水呀~ 然鹅学了不到一个月文化课再回来看OI的东西有一种恍如隔世的感觉,烤前感觉也没啥可复习的,就补一补去年二轮的题吧. 题目思路基本都参考自sha ...

  5. Bzoj 近期题目一句话题解

    目录 Bzoj 近期题目题解 1000: A+B Problem (模拟) 1008: [HNOI2008]越狱 (容斥) 1012: [JSOI2008]最大数maxnumber (线段树) 103 ...

  6. BZOJ 1~10 精简题解

    从这星期起,我开始了怒刷BZOJ的旅程.这几天刷了10道题(由于"档期"的原因,所以有几道题没打完-..捂脸--..) 精简题解: 1000 A+B Problem --.. [B ...

  7. BZOJ 1047 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...

  8. BZOJ 4247: 挂饰 题解

    Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...

  9. 【待填坑】bzoj上WC的题解

    之前在bzoj上做了几道WC的题目,现在整理一下 bzoj2115 去膜拜莫队的<高斯消元解xor方程组> bzoj2597 LCT维护MST bzoj1758 分数规划+树分治+单调队列 ...

随机推荐

  1. 廖雪峰Java10加密与安全-3摘要算法-3SHA-1算法

    1.SHA-1算法 SHA-1算法也是一种哈希算法. 输出160 bits/20bytes 由美国国家安全局开发 SHA-0/SHA-1/SHA-256/SHA-512 * SHA-0有问题,已经作废 ...

  2. Linux C类型

    BOOL: http://www.cnblogs.com/pharen/archive/2012/02/06/2340257.html GCC编译器参数介绍: http://blog.csdn.net ...

  3. 中国 SaaS 企业如何突围?这几点是关键!

    进入2019年,关于SaaS的各种言论甚嚣尘上,有人看好:“SaaS市场得大客户者得天下”,也有人唱衰:“SaaS已死,下一个”.在众说纷纭中,中国SaaS企业的成功之路迷雾重重,前期走的较早的头部S ...

  4. SQL的特点

    1.综合统一 2.高度非过程化 3.面向集合的操作方式 4.一同一种语法结构提供两种使用5.语言简洁易学易用

  5. axios post请求后台接收不到参数 和 一些配置问题

    原因: axios 的 headers的 content-type  默认是 “application/json ”,传给后台的格式是这样的: 但是后台接收数据的格式一般是表单格式的,就是formda ...

  6. Android根据联系人姓名首字符顺序读取通讯录

      Android根据联系人姓名首字符顺序读取通讯录 版权声明:本文为Zhang Phil原创文章,欢迎转载!转载请注明出处:http://blog.csdn.net/zhangphil 本文给出了A ...

  7. RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景?

    RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景? RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景? - 知乎 https://www ...

  8. APT甲级——A1069 The Black Hole of Numbers

    For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in ...

  9. WhaleCTF之web密码泄露

    WhaleCTF之密码泄露 前往题目 没有思路,习惯看一下源码,拉到最后,发现有惊喜 直接把index.php 换成password.txt,访问 这是要让我密码爆破吗?直接把密码保存成passwor ...

  10. Leetcode543.Diameter of Binary Tree二叉树的直径

    给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树 1 / \ 2    3 / \ 4  5 返回 3, 它 ...