[JOI2014] 小笼包
题面 : https://www.ioi-jp.org/joi/2013/2014-yo/2014-yo-t6/2014-yo-t6.html
题解
dp + 康托展开
一看这题不知道怎么处理
只能枚举顺序来处理小笼包的价值
然后又发现这个\(d[]\)只有7
所以可以状压他们的顺序
用现学的康托展开将前7个的顺序存储起来
用\(f[i][S]\)表示到第i个小笼包,包括第i个小笼包的前7个的先后顺序是什么
然后枚举第i+1个小笼包的顺序
算下对前面的贡献和前面的对ta的贡献
暴力dp即可
时间复杂度\(O(7!*n*7)\)
可以通过此题
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int M = 105 ;
const int N = 5050 ;
using namespace std ;
inline int read() {
char c = getchar() ; int x = 0 , w = 1 ;
while(c>'9'||c<'0') { if(c=='-') w = -1 ; c = getchar() ; }
while(c>='0'&&c<='9') { x = x*10+c-'0' ; c = getchar() ; }
return x*w ;
}
int n ;
int v[M] , d[M] , Ans ;
int fac[9] , f[M][N] ;
int p[9] , w[9] ;
bool vis[9] ;
inline int Merge() {
int Ans = 0 ;
for(int i = 1 , ret ; i <= 7 ; i ++) {
ret = 0 ;
for(int j = i + 1 ; j <= 7 ; j ++)
if(w[i] > w[j])
++ ret ;
Ans += ret * fac[7 - i] ;
}
return Ans + 1 ;
}
inline void Split(int x) {
memset(vis , false , sizeof(vis)) ;
x -= 1;
for(int i = 1 , ret , now ; i <= 7 ; i ++) {
ret = x / fac[7 - i] ;
for(now = 1 ; now <= n ; now ++)
if(!vis[now]) {
if(!ret) break ;
ret -- ;
}
p[i] = now ;
vis[now] = true ;
x %= fac[7 - i] ;
}
}
int main() {
n = read() ;
for(int i = 1 ; i <= n ; i ++) d[i] = read() ;
for(int i = 1 ; i <= n ; i ++) v[i] = read() ;
fac[0] = 1 ;
for(int i = 1 ; i <= 7 ; i ++) fac[i] = fac[i - 1] * i ;
for(int i = 1 ; i <= n ; i ++)
for(int S = 1 ; S <= fac[7] ; S ++) {
Split(S) ;
for(int j = 1 , ret ; j <= 8 ; j ++) { // ö¾ÙµÚi+1λµÄ˳Ðò
ret = 0 ;
for(int k = 1 ; k <= 7 ; k ++)
if(p[k] < j) w[k] = p[k] ;
else w[k] = p[k] + 1 ;
w[8] = j ;
for(int k = 1 ; k <= 7 ; k ++)
if((i - (7 - k)) > 0 && w[k] < w[8] && d[i - (7 - k)] >= 8 - k)
ret += v[i - (7 - k)] ;
for(int k = 1 ; k <= 7 ; k ++)
if((i - (7 - k)) > 0 && w[k] > w[8] && d[i + 1] >= 8 - k)
ret += v[i + 1] ;
for(int k = 2 ; k <= 8 ; k ++)
if(w[k] > w[1]) w[k] -- ;
for(int k = 1 ; k <= 7 ; k ++)
w[k] = w[k + 1] ;
int x = Merge() ;
f[i + 1][x] = max(f[i + 1][x] , f[i][S] + ret) ;
}
}
for(int i = 1 ; i <= fac[7] ; i ++) Ans = max(Ans , f[n][i]) ;
printf("%d\n",Ans) ;
return 0 ;
}
[JOI2014] 小笼包的更多相关文章
- Qt widget--杭州小笼包
1,QPainter::scale(double,double);第一个参数水培方向缩放 shear剪切 QPainter::rotate()旋转,旋转度数,rotate QPainter::tran ...
- iOS - Regex 正则表达式
1.Regex 定义 正则表达式又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为 regex.regexp 或 RE),计算机科学的一个概念.正则表达式使用单个 ...
- HDU - Pseudoforest
Description In graph theory, a pseudoforest is an undirected graph in which every connected componen ...
- [知识库分享系列] 二、.NET(ASP.NET)
最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...
- love yy-kiss 医生出差二期
医生出差二期,做了一半撤出去做互联网医院了 http://confluence.haodf.net/pages/viewpage.action?pageId=15801359 医生出差二期 没设置数 ...
- JSOI2015 分组赛记
分组赛结束了,虽然跟我关系不大,但是去了还是学到了不少东西 day1 上午报到,在宾馆遇到大神wzy,orz 好像没有参赛证发了,于是给我发了一个[工作证],233我是工作人员了,高贵冷艳 下午是常中 ...
- Swift基本语法及与OC比较之二
//MARK:-----------------控制流----------------- //MARK: 1.for - in 循环 ,不用声明Value类型 //for value in 1...6 ...
- 玩转kindle paperwhite: 如何越狱,安装强大外挂软件koreader
NOTICE 1: 在更新kpvbooklet和使用最新版本的koreader(v2013.03-211)时候,会出现pdf文档无法重排的错误.亲测. 如果你是使用的最新版本koreader且出现上述 ...
- 20款最好的免费的IDES和编辑器
程序员编程利器:20款最好的免费的IDES和编辑器 Posted on 2015-02-17 21:52 尛鱼 阅读(170) 评论(1) 编辑 收藏 程序员编程利器:20款最好的免费的IDEs和编辑 ...
随机推荐
- 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...
- 跨域请求Ajax(POST)处理方法
getXSSAjax(function() { //跨域请求 that.ajaxDara(self);}, (bs_tita.webapi || "http://webapi ...
- 51nod1020 逆序排列
t<=10000个问,每次问n<=1000的全排列中逆序数对为k<=10000个的有多少,mod 1e9+7. 直接dp,$f(i,j)$--i的全排列中逆序数对为j的有多少,$f( ...
- maven坐标查询
使用maven时,一个经常用到的操作就是去 中央仓库查询相关库的坐标,但在哪里查呢? 1 http://mvnrepository.com/ 服务器是由sonatype提供的,采用的是Nexus服务器 ...
- 解析excel文件并将数据导入到数据库中
今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...
- Ubuntu 16.04设置Redis为开机自动启动服务
继上一篇文章http://www.cnblogs.com/EasonJim/p/7599941.html安装好Redis后,假设文件已经安装到/usr/local/redis目录下.假设我安装的版本为 ...
- centos下性能分析工具perf的安装和简单使用
1.安装: cat /etc/redhat-releaseCentOS release 6.6 (Final) sudo yum install perf 2.
- 又见古老的Typosquatting攻击:这次入侵Npm窃取开发者身份凭证
有些攻击方式虽然听起来很幼稚,但有时候却也可以生效,比如typosquatting攻击——我们上次看到这种攻击是在去年6月份,这本身也是种很古老的攻击方式. 所谓的typosquatting,主要是通 ...
- DELL T110II Server如何通过RAID 级别迁移的方式在OMSA下实现磁盘阵列扩容?
目录: RAID 转移规则说明 操作步骤 本文介绍了 通过RAID 级别转换来实现扩容的方法注意:本文相关RAID的操作,仅供在测试环境里学习和理解戴尔PowerEdge服务器RAID控制卡的功能和使 ...
- JSP自己定义标签入门实例具体解释
JSP自己定义标签主要能用到的两个包 javax.servlet.jsp.*;javax.servlet.jsp.tagext.*; 自己定义标签<userInfo:showUserInfo/& ...