Flight Boarding Optimization

题目连接:

http://codeforces.com/gym/100269/attachments

Description

Peter is an executive boarding manager in Byteland airport. His job is to optimize the boarding process.

The planes in Byteland have s rows, numbered from 1 to s. Every row has six seats, labeled A to F.

F

E

D

C

B

A

1 2 3 4 5 6 7 8 9 10

...

...

...

...

...

...

s

Boarding

There are n passengers, they form a queue and board the plane one by one. If the i-th passenger sits in

a row ri then the difficulty of boarding for him is equal to the number of passengers boarded before him

and sit in rows 1 . . . ri −1. The total difficulty of the boarding is the sum of difficulties for all passengers.

For example, if there are ten passengers, and their seats are 6A, 4B, 2E, 5F, 2A, 3F, 1C, 10E, 8B, 5A,

in the queue order, then the difficulties of their boarding are 0, 0, 0, 2, 0, 2, 0, 7, 7, 5, and the total

difficulty is 23.

To optimize the boarding, Peter wants to divide the plane into k zones. Every zone must be a continuous

range of rows. Than the boarding process is performed in k phases. On every phase, one zone is selected

and passengers whose seats are in this zone are boarding in the order they were in the initial queue.

In the example above, if we divide the plane into two zones: rows 5–10 and rows 1–4, then during the first

phase the passengers will take seats 6A, 5F, 10E, 8B, 5A, and during the second phase the passengers

will take seats 4B, 2E, 2A, 3F, 1C, in this order. The total difficulty of the boarding will be 6.

Help Peter to find the division of the plane into k zones which minimizes the total difficulty of the

boarding, given a specific queue of passengers.

Input

The first line contains three integers n (1 ≤ n ≤ 1000), s (1 ≤ s ≤ 1000), and k (1 ≤ k ≤ 50; k ≤ s).

The next line contains n integers ri (1 ≤ ri ≤ s).

Each row is occupied by at most 6 passengers.

Output

Output one number, the minimal possible difficulty of the boarding

Sample Input

10 12 2

6 4 2 5 2 3 1 11 8 5

Sample Output

6

Hint

题意

现在有n个人,s个位置和你可以划分长k个区域

你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量

问你怎么划分这s个位置(当然,每个区域必须是连续的),才能使得总代价最小

输出代价

题解:

数据范围1000,显然的dp

dp[i][j]表示第i个位置是第j个区域的结尾,然后暴力转移就好了

用树状数组预处理sum[i][j],表示第i个位置和第j个位置划分在一起的代价是多少

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1050;
int dp[maxn][55];
int sum[maxn][maxn];
int r[maxn];
int n,m,k;
int a[maxn];
vector<int> E[maxn];
int lowbit(int x)
{
return x&(-x);
}
int get(int x)
{
int ans = 0;
for(int i=x;i;i-=lowbit(i))
ans+=a[i];
return ans;
}
void update(int x,int v)
{
for(int i=x;i<maxn;i+=lowbit(i))
a[i]+=v;
}
int main()
{
freopen("flight.in","r",stdin);
freopen("flight.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&r[i]);
E[r[i]-1].push_back(i);
}
for(int i=0;i<m;i++)
{
memset(a,0,sizeof(a));
for(int j=i;j<m;j++)
{
if(i!=j)sum[i][j]=sum[i][j-1];
for(int t=0;t<E[j].size();t++)
sum[i][j]+=get(E[j][t]);
for(int t=0;t<E[j].size();t++)
update(E[j][t],1);
}
} for(int i=0;i<=m;i++)
for(int j=0;j<=k;j++)
dp[i][j]=1e9;
dp[0][0]=0;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
{
if(dp[i][j]==1e9)continue;
for(int t=i;t<m;t++)
dp[t+1][j+1]=min(dp[t+1][j+1],dp[i][j]+sum[i][t]);
}
cout<<dp[m][k]<<endl;
}

Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp的更多相关文章

  1. Codeforces Testing Round #12 C. Subsequences 树状数组维护DP

    C. Subsequences Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/probl ...

  2. Gym - 100269F Flight Boarding Optimization(dp+树状数组)

    原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...

  3. Codeforces 946G Almost Increasing Array (树状数组优化DP)

    题目链接   Educational Codeforces Round 39 Problem G 题意  给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...

  4. Codeforces Gym 100114 H. Milestones 离线树状数组

    H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...

  5. [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)

    树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...

  6. 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)

    [题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...

  7. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains 【树状数组维护区间最大值】

    题目传送门:http://codeforces.com/contest/799/problem/C C. Fountains time limit per test 2 seconds memory ...

  8. Codeforces 216D Spider&#39;s Web 树状数组+模拟

    题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,假设梯形左边的点数!=梯形右边的点数,那么这个梯形为红色.否则为绿色, ...

  9. Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)

    题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...

随机推荐

  1. nginx路由文件配置

    nginx中文文档 Nginx 的请求处理有多个阶段,比如说rewrite.access.content等等,不同的配置字段属于不同的配置阶段,不同阶段的先后执行顺序不一样,例如rewrite在con ...

  2. win7下安装Linux实现双系统全攻略

    http://jingyan.baidu.com/article/c275f6bacc3326e33c756743.html

  3. Linux汇编教程03:大小比较操作

    我们在上一讲中,简单了解了汇编程序大概的样子.接下来我们来了解一下,汇编程序的大小比较操作.所以我们以编写寻找一堆数中的最大值作为学习的载体. 在编写程序之前,先要分析我们的目的,在得出解决方案. 目 ...

  4. ERROR 1682 (HY000)

    ERROR 1682 (HY000) xtrabackup 恢复数据库后,出现1682错: root@localhost [(none)]>show global variables like ...

  5. python设计模式之单例模式(二)

    上次我们简单了解了一下什么是单例模式,今天我们继续探究.上次的内容点这 python设计模式之单例模式(一) 上次们讨论的是GoF的单例设计模式,该模式是指:一个类有且只有一个对象.通常我们需要的是让 ...

  6. Spring,tk-mapper源码阅读

    Mybatis的源码学习(一): 前言: 结合spring本次学习会先从spring-mybatis开始分析 在学习mybatis之前,应该要对spring的bean有所了解,本文略过 先贴一下myb ...

  7. cacti (不可以利用yum安装cacti的配置)

    我们如果用yum不可以安装cacti,我们则可以利用tar包来安装!!! //cacti的配置准备 [root@localhost ~]# yum install -y epel-release [r ...

  8. java的IO流之字符流

    # 原创,转载请留言联系 输出流 FileWriter类 常见的构造方法: FileWriter(String fileName)     根据给定的文件名构造一个 FileWriter 对象.Fil ...

  9. 在Redis集群中使用pipeline批量插入

    在Redis集群中使用pipeline批量插入 由于项目中需要使用批量插入功能, 所以在网上查找到了Redis 批量插入可以使用pipeline来高效的插入, 示例代码如下: Pipeline p = ...

  10. Django Ajax学习一

    1. 简单的加法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...