链接

思路借鉴了这个博客

我们可以想到状压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. [转]WPF--模板选择

    典型的,把模板关联到一块特定的数据上,不过通常希望动态的确定使用哪个模板---既可以基于一个属性值,也可以是一个全局状态.当真正需要大规模替换模板时,也可以使用DataTemplateSelector ...

  2. jqGrid 属性、事件全集

    <html> ... <table id="list1"></table> <div id="pager1">& ...

  3. Luogu P2679 子串(字符串+dp)

    P2679 子串 题意 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\ ...

  4. CF 549B Looksery Party

    题面 解题思路 如果a数组全部>0,那么都不去即可.从这个角度出发,每次选出a[i]为0的,让它们去更新a数组,相当于拓补排序. 代码 #include<iostream> #inc ...

  5. JS字符串的相关方法

    1.字符方法 charAt()和charCodeAt(),都接收一个参数,charAt()返回的是给定位置的字符,charCodeAt()返回的是给定位置字符的字符编码.如: <script&g ...

  6. Chai.js断言库API中文文档

    基于chai.js官方API文档翻译.仅列出BDD风格的expect/should API.TDD风格的Assert API由于不打算使用,暂时不放,后续可能会更新. BDD expect和shoul ...

  7. body-parser与querystring与multer的区别

    body-parser express中间件 body-parser是用来解析http请求体的,是express默认使用的中间件之一. (只解析post的普通数据请求,无法解析post文件请求) 使用 ...

  8. 20190716-T1-礼物

    呵呵,我暴力WA了 这个题充分考验了大家对数学的理解(麦蒙大多在胡诌) 但是确实如此啊. 看数据范围想状压.(我额嗯嗯想到暴力?) 然后设出一个可爱的$dp$式(主语当然不是我,是出题人大佬) $f_ ...

  9. fixed和absolute的区别

    今天在实际项目中,写首页一屏的时候,发现页脚定位(position:absolute:)没有达到我想要的效果(不管屏幕大小,页脚始终相对浏览器底部定位).于是我觉得有点奇怪,然而我旁边的小哥说:很明显 ...

  10. spring springmvc 展示图片,静态资源的处理

    jsp中显示一张照片 <img alt="静态图片" src="static/目录.png"> 然后在springmvc的配置中加上 <!-- ...