洛谷 P1777 帮助_NOI导刊2010提高(03) 解题报告
P1777 帮助_NOI导刊2010提高(03)
题目描述
Bubu的书架乱成一团了!帮他一下吧!
他的书架上一共有n本书。我们定义混乱值是连续相同高度书本的段数。例如,如果书的高度是30,30,31,31,32,那么混乱值为3,30,32,32,31的混乱度也是3,但31,32,31,32,31的混乱度是5-,这实在是太乱了。
Bubu想尽可能地减少混乱度,但他有点累了,所以他决定最多取出k本书,再随意将它们放到书架上。你能帮助他吗?
输入输出格式
输入格式:
最多会有20组测试数据。每组测试数据开头为两个整数n,k(l≤k≤n≤100),表示总共有n本书,最多可以进行k次搬书操作。接下来一行有n个整数,表示每本书的高度,从左到右。每本书的高度是25到32间的整数。最后一组数据后有一行n=k=0。
输出格式:
对于每一组数据,输出Case标号和最终最小的混乱度。在每组数据后打印一个空行。
我们发现,对于拿出去的书是可以随便放的,因为我们可以最后处理它们。
很显然要做DP,顺序可以直接从左到右,满足无后效性。需要最后一个书的编号,以便后面使用。当然取出了几本也得压进状态。
为了处理拿出去的书,我们得把书的状态集合给存储下来。因为拿出去的书拿走以后,可能在原书架里面没有了,最后要根据状态放回来。
方程:
\(dp[i][j][sta][l]\)表示\(i\)位置第\(j\)次换书之前的书的状态集合为\(sta\)当前书的集合最后一本为\(l\)
Code:
#include <cstdio>
#include <cstring>
const int N=104;
const int inf=0x3f3f3f3f;
int min(int x,int y){return x<y?x:y;}
int dp[2][N][1<<10][10],n,k,r,a[N];
void DP()
{
for(int i=1;i<=n;i++)//位置
{
memset(dp[i&1],0x3f,sizeof(dp[i&1]));
for(int j=0;j<=min(k,i);j++)//拿走了几个
for(int sta=0;sta<(1<<r);sta++)//前面的状态,这个没填
for(int l=0;l<=r;l++)//末尾书本
if(!l||(sta>>l-1)&1)
{
dp[i&1][j][sta|(1<<a[i]-1)][a[i]]=min(dp[i&1][j][sta|(1<<a[i]-1)][a[i]]
,dp[i-1&1][j][sta][l]+(l!=a[i]));//不拿
if(j)
dp[i&1][j][sta][l]=min(dp[i&1][j][sta][l],dp[i-1&1][j-1][sta][l]);//拿走
}
}
}
int cal(int x)
{
int cnt=0;
while(x)
{
cnt++;
x-=x&-x;
}
return cnt;
}
int main()
{
scanf("%d%d",&n,&k);
int cnt=0;
while(n&&k)
{
int sta=0;
r=0;cnt++;
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
a[i]-=24;
r=r>a[i]?r:a[i];
sta|=1<<a[i]-1;
}
memset(dp[0],0x3f,sizeof(dp[0]));
dp[0][0][0][0]=0;
DP();
int ans=inf;
for(int i=1;i<=k;i++)
for(int j=0;j<(1<<r);j++)
for(int l=1;l<=r;l++)
if(dp[n&1][i][j][l]!=inf)
ans=min(ans,dp[n&1][i][j][l]+cal(sta-j));
printf("Case %d: %d\n\n",cnt,ans);
scanf("%d%d",&n,&k);
}
return 0;
}
2018.7.6
洛谷 P1777 帮助_NOI导刊2010提高(03) 解题报告的更多相关文章
- 洛谷 P1769 淘汰赛制_NOI导刊2010提高(01)
P1769 淘汰赛制_NOI导刊2010提高(01) 题目描述 淘汰赛制是一种极其残酷的比赛制度.2n名选手分别标号1,2,3,…,2^n-1,2^n,他们将要参加n轮的激烈角逐.每一轮中,将所有参加 ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)(未完)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- [洛谷P1801]黑匣子_NOI导刊2010提高(06)
题目大意:两个操作:向一个可重集中加入一个元素:询问第$k$大的数($k$为之前询问的个数加一) 题解:离散化,权值线段树直接查询 卡点:无 C++ Code: #include <cstdio ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)
题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06) 题解
昨晚恶补了一下二叉堆的内容 然后就找了几个二叉堆的题来做awa 然后发现用二叉堆做这题复杂度是O(nlogn) 但是有O(n)的解法 (某大佬这么说) 思路大概就是: 利用一个大根堆一个小根堆来维护第 ...
- 洛谷 P1950 长方形_NOI导刊2009提高(2)
传送门 思路 首先定义\(h\)数组,\(h[i][j]\)表示第\(i\)行第\(j\)列最多可以向上延伸多长(直到一个被用过的格子) 然后使用单调栈算出 \(l_i\)和 \(r_i\) ,分别是 ...
- 洛谷 P1767 家族_NOI导刊2010普及(10)
题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...
- 洛谷——P1767 家族_NOI导刊2010普及(10)
P1767 家族_NOI导刊2010普及(10) 题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝 ...
- 洛谷 P1765 手机_NOI导刊2010普及(10)
题目描述 一般的手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 # 要按出英文字母就必须要按数字键多下.例如要按出 ...
随机推荐
- Python浮点算术:争议和限制
浮点数在计算机硬件中表示为以 2 为基数(二进制)的小数.举例而言,十进制的小数 0.125 等于 1/10 + 2/100 + 5/1000 ,同理,二进制的小数 0.001 等于0/2 + 0/4 ...
- ABP.ModuleZero.Feature——特性管理
原文地址:http://aspnetboilerplate.com/Pages/Documents/Feature-Management (在翻译原文的基础上增补更多细节说明) 简介 在大多数SAA ...
- Ubuntu系统无法识别Logitech M590蓝牙鼠标的问题
参见 - https://blog.csdn.net/yh2869/article/details/73119018 亲测可用. 系统:ubuntu 16.04 64bit 现象:鼠标配对可以成功,但 ...
- excel窗口独立显示/单独显示
天赋异禀的亲,一看就懂!
- ubuntu16更新源
http://blog.csdn.net/fengyuzhiren/article/details/54844870
- ASP.NET中实现封装与策略模式
首先把运算方法封装起来,这样在网页界面中直接就可以调用了,不过是换张脸而已! using System; using System.Collections.Generic; using System. ...
- c++工厂模式(Factory method)
下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...
- eg_7
1. 给定Map,根据Map中的值从大到小排列 package com.studentmanager.www; import java.util.ArrayList; import java.util ...
- JTS
在这个系列的 第 1 部分,我们讨论了事务并研究了它们的基本属性 ― 原子性(atomicity).一致性(consistency).孤立性(isolation)和持久性(durability).事务 ...
- 用css 修改 谷歌浏览器自带的 滚动条样式
::-webkit-scrollbar { width: 0.5rem;}/* Track */ ::-webkit-scrollbar-track { -webkit-box-shadow: ins ...