题面 : 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] 小笼包的更多相关文章

  1. Qt widget--杭州小笼包

    1,QPainter::scale(double,double);第一个参数水培方向缩放 shear剪切 QPainter::rotate()旋转,旋转度数,rotate QPainter::tran ...

  2. iOS - Regex 正则表达式

    1.Regex 定义 正则表达式又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为 regex.regexp 或 RE),计算机科学的一个概念.正则表达式使用单个 ...

  3. HDU - Pseudoforest

    Description In graph theory, a pseudoforest is an undirected graph in which every connected componen ...

  4. [知识库分享系列] 二、.NET(ASP.NET)

    最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...

  5. love yy-kiss 医生出差二期

    医生出差二期,做了一半撤出去做互联网医院了 http://confluence.haodf.net/pages/viewpage.action?pageId=15801359  医生出差二期 没设置数 ...

  6. JSOI2015 分组赛记

    分组赛结束了,虽然跟我关系不大,但是去了还是学到了不少东西 day1 上午报到,在宾馆遇到大神wzy,orz 好像没有参赛证发了,于是给我发了一个[工作证],233我是工作人员了,高贵冷艳 下午是常中 ...

  7. Swift基本语法及与OC比较之二

    //MARK:-----------------控制流----------------- //MARK: 1.for - in 循环 ,不用声明Value类型 //for value in 1...6 ...

  8. 玩转kindle paperwhite: 如何越狱,安装强大外挂软件koreader

    NOTICE 1: 在更新kpvbooklet和使用最新版本的koreader(v2013.03-211)时候,会出现pdf文档无法重排的错误.亲测. 如果你是使用的最新版本koreader且出现上述 ...

  9. 20款最好的免费的IDES和编辑器

    程序员编程利器:20款最好的免费的IDES和编辑器 Posted on 2015-02-17 21:52 尛鱼 阅读(170) 评论(1) 编辑 收藏 程序员编程利器:20款最好的免费的IDEs和编辑 ...

随机推荐

  1. SPOJ-BRCKTS (括号序列,线段树)

    维护括号序列 Replace(i): 将第i个位置的括号反向. Check:测试当前序列是否合法. 题解 将左括号定为1,右括号定为-1,所以只需要满足前缀和序列没有负数即可,即最小值 为正即可,第i ...

  2. vue2.0一个书城实例

    gitHub克隆地址 git clone https://github.com/Webxiaoyaun/vue-book.git 点击去Github下载 ## 一个书城 ## 有增加,修改,缓存,懒加 ...

  3. [K/3Cloud] 创建一个单据转换插件

    概念: 创建一个业务单据转换插件,在单据转换的各个时点干预单据转换的相关逻辑控制. 示例: 新建一个类,继承自单据转换插件基类Kingdee.BOS.Core.Metadata.ConvertElem ...

  4. SPOJ NSUBSTR (后缀自动机)

    SPOJ NSUBSTR Problem : 给一个长度为n的字符串,要求分别输出长度为1~n的子串的最多出现次数. Solution :首先对字符串建立后缀自动机,在根据fail指针建立出后缀树,对 ...

  5. 封装java-get-post请求方式

    package com.ecar.eoc.content.platform.utils; import java.io.IOException;import java.util.HashMap;imp ...

  6. IntentService用于服务中开启子线程的自动关闭

    package com.pingyijinren.test; import android.app.IntentService; import android.content.Intent; impo ...

  7. vue生成包报错error from UglifyJs

    mangle: { keep_fnames: true},

  8. element-ui自定义table表头

    场景描述: 这个需求的场景很简单,表头自定义居中显示 <el-table-column show-overflow-tooltip prop="telephone" labe ...

  9. Spring 加载类路径外的资源文件

    原文:http://blog.csdn.net/gaofuqi/article/details/46417259 <bean id="propertyConfigurer" ...

  10. 关于jQuery写插件及其演示

    关于写jQuery插件是非常有必要的.这是前端学习其中必须经过的一个过程 对于初次写插件先想清楚原理       (function($){  $.fn.yourName = function(opt ...