原题链接

题意

现在有n个人,s个位置和你可以划分长k个区域
你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量
问你怎么划分这s个位置(当然,每个区域必须是连续的),才能使得总代价最小,输出代价。

分析
dp[i][j]表示第i个位置是第j个区域的结尾,dp[i][j]→dp[t][j+1]暴力转移。但是需要预处理每个范围里的代价值,需要树状数组维护。

#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
int dp[maxn][];
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 = ;
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=;i<=n;i++)
{
scanf("%d",&r[i]);
E[r[i]-].push_back(i);
}
for(int i=;i<m;i++)
{
memset(a,,sizeof(a));
for(int j=i;j<m;j++)
{
if(i!=j)sum[i][j]=sum[i][j-];
for(int t=;t<E[j].size();t++)
sum[i][j]+=get(E[j][t]);
for(int t=;t<E[j].size();t++)
update(E[j][t],);
}
} for(int i=;i<=m;i++)
for(int j=;j<=k;j++)
dp[i][j]=1e9;
dp[][]=;
for(int i=;i<m;i++)
for(int j=;j<k;j++)
{
if(dp[i][j]==1e9)continue;
for(int t=i;t<m;t++)
dp[t+][j+]=min(dp[t+][j+],dp[i][j]+sum[i][t]);
}
cout<<dp[m][k]<<endl;
}

Gym - 100269F Flight Boarding Optimization(dp+树状数组)的更多相关文章

  1. Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp

    Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is ...

  2. 树形DP+树状数组 HDU 5877 Weak Pair

    //树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...

  3. bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 793  Solved: 503[Submit][S ...

  4. 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...

  5. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  6. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. HDU 2227 Find the nondecreasing subsequences (DP+树状数组+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 Find the nondecreasing subsequences             ...

  8. ccpc_南阳 C The Battle of chibi dp + 树状数组

    题意:给你一个n个数的序列,要求从中找出含m个数的严格递增子序列,求能找出多少种不同的方案 dp[i][j]表示以第i个数结尾,形成的严格递增子序列长度为j的方案数 那么最终的答案应该就是sigma( ...

  9. HDU 2838 (DP+树状数组维护带权排序)

    Reference: http://blog.csdn.net/me4546/article/details/6333225 题目链接: http://acm.hdu.edu.cn/showprobl ...

随机推荐

  1. The MathType Dll cannot be found 问题解决办法

    被这个问题困扰了许久,找到了解决办法,没想到最后居然是因为mathtype安装路径里的文件位置有问题(至少我是这么认为的).是这样的,在安装完mathtype6.9b后,发现打开word2013是正常 ...

  2. PDB自动启动以及Oracle Pfile的参数修改示范

    1. Oracle12c 可以使用PDB的模式进行创建, 但是他一般不会自动启动,所以可以穿件一个触发器进行处理 创建语句 CREATE TRIGGER open_all_pdbs AFTER STA ...

  3. delphi的一个公用函数库

    delphi的一个公用函数库 {********************************************** ***  Name: PublicFunc; ***  Author: l ...

  4. Hbase Shell 数据操作说明

    启动.关闭hbase./bin/start-hbase.sh./bin/stop-hbase.sh 查询HBase版本.它的语法如下:hbase(main):010:0> version 建表c ...

  5. python之文件目录操作

    代码示例: # 改变当前目录操作 import os cur = os.curdir print("1.当前目录相对路径:", cur) par = os.pardir print ...

  6. 一本通1546【NOIP2011】选择客栈

    1546:NOIP2011 选择客栈 时间限制: 1000 ms         内存限制: 524288 KB 题目描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号. ...

  7. 使用libcurl 发送post请求

    SendHttpPost(string& strUrl, string& strPost, string& strResponse, int nTimeOut) { CURLc ...

  8. ceph radosgw-admin的操作

    常用操作: 生成一新用户: 在两个集群当中都创建相同的管理用户 radosgw-admin user create --uid=admin --display-name=admin --access_ ...

  9. CF-Contest339-614

    614A-Link/Cut Tree 比较水,注意64位int仍然可能溢出. #include <cstdio> #include <algorithm> #include & ...

  10. MT【39】构造二次函数证明

    这种构造二次函数的方法最早接触的应该是在证明柯西不等式时: 再举一例: 最后再举个反向不等式的例子: 评:此类题目的证明是如何想到的呢?他们都有一个明显的特征$AB\ge(\le)C^2$,此时构造二 ...