Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp
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的更多相关文章
- Codeforces Testing Round #12 C. Subsequences 树状数组维护DP
C. Subsequences Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/probl ...
- Gym - 100269F Flight Boarding Optimization(dp+树状数组)
原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...
- Codeforces 946G Almost Increasing Array (树状数组优化DP)
题目链接 Educational Codeforces Round 39 Problem G 题意 给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...
- Codeforces Gym 100114 H. Milestones 离线树状数组
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...
- [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)
树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
- 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 ...
- Codeforces 216D Spider's Web 树状数组+模拟
题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,假设梯形左边的点数!=梯形右边的点数,那么这个梯形为红色.否则为绿色, ...
- Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)
题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...
随机推荐
- sublime3插件安装及报错处理
ctrl+shift+p调用出窗口:输入install package,然后输入想安装的插件. 有些用户安装的可能是国内破解版的,我的就是,然后install package报错: Package C ...
- Linux后台研发面试题
本系列给出了在复习过程中一些C++后台相关面试题,回答内容按照笔者的知识点掌握,故有些问题回答较为简略 1.信号的生命周期 一个完整的信号生命周期可以用四个事件刻画:1)信号诞生:2)信号在进程中注册 ...
- c#导出文件,下载文件,命名下载后的文件名
Page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpU ...
- angular数据绑定---js全局学习
<!DOCTYPE html> <html ng-app> <head> <title>Simple app</title> </he ...
- 在Github里集成Readthedocs服务
Readthedocs支持Markdown格式和sphinx格式的文档排版,是部署项目文档的绝佳平台.利用Github的托管服务,我们可以方便地将文档托管于Github,并利用Readthedocs查 ...
- 【Educationcal Codeforces Round 21】
这场edu我原本以为能清真一点…… 后来发现不仅是七题 还有各种奇奇怪怪的骚操作…… A. 随便枚举 #include<bits/stdc++.h> using namespace std ...
- VPS性能测试方法小结(8)
1.为了能够得到更为准确和详细的有关VPS主机性能测试数据,我们应该多角度.全方位地运行多种VPS性能测试工具来进行检测,同时也要记得排除因本地网络环境而造成的数据结果的错误. 2.VPS主机性能跑分 ...
- thinkphp模板常用的方法
thinkphp模板我是看了3.2的文档,对里面的东西过了一遍,然后在写到需要用到模板的东西的时候就有印象,有的能直接回顾,但是有的就可能只知道有这个东西,但是不知道怎么用,所以就重新查手册,这个的话 ...
- (转载)IntelliJ IDEA 自动导入包 快捷方式
原文地址:IntelliJ IDEA 自动导入包 快捷方式 idea可以自动优化导入包,但是有多个同名的类调用不同的包,必须自己手动Alt+Enter设置 设置idea导入包 勾选标注 1 选项,In ...
- SQL 分页通用存储过程
USE [DB] GO /****** Object: StoredProcedure [dbo].[SP_AspNetPager] Script Date: 10/23/2015 16:37:33 ...