You Are the One
题意:
有n个人排队,第i个入场的人x的不愉快度是$D_x*(i-1)$,现在给你n个人在队伍中的位置,
你可以用一个栈让一个人后面的人先进入,问最小的不愉快度是多少。
解法:
考虑注意到用栈调整次序时,如果$x_1$从$l$调整到了$r$的位置,那么如果有$x_2$的位置在$l$,
$r$之间那么一定要满足$l<l_2<=r_2<r$。
这样考虑dp:
$f(i,j)$表示i到j最大可以通过调整减小多少的不愉快度,这样就可以dp了。
(注意在转移不交换的情况下$f(i,j) = max \{ f(i+1,j), f(i,j-1) \}$ 不正确,
因为这样求出来的是一个一个大区间套着小区间的答案,不能表示两个区间相互独立的情况,
应该是$f(i,j) = max \{ f(i,k)+f(k+1,j) \}$)
时间复杂度$O(n^3)$。
#include <iostream>
#include <cstdio>
#include <cstring> #define N 110 using namespace std; int n,ans;
int D[N],f[N][N],S[N]; int main()
{
int T,Te=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
S[]=;
ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&D[i]);
S[i]=S[i-]+D[i];
ans+=(i-)*D[i];
}
for(int i=;i<=n;i++) f[i][i]=;
for(int d=;d<=n;d++)
{
for(int i=;i<=n-d+;i++)
{
int j=i+d-;
f[i][j]=;
for(int k=i;k<j;k++)
f[i][j] = max(f[i][j], f[i][k]+f[k+][j]);
f[i][j] = max(f[i][j], f[i+][j]+S[j]-S[i]-D[i]*(j-i));
}
}
printf("Case #%d: %d\n",++Te,ans-f[][n]);
}
return ;
}
随机推荐
- python(8)- python基础数据类型
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视 频.网页等各种各样的数据,不同的数据,需要 ...
- mysql: Data source rejected establishment of connection, message from server: "Too many connections"
http://www.oschina.net/question/558677_66703 com.mysql.jdbc.exceptions.MySQLNonTransientConnectionEx ...
- 笔记09 WS,WCF
http://blog.csdn.net/avi9111/article/details/5655563 http://www.cnblogs.com/tearer/archive/2013/04/2 ...
- 【程序猿联盟】官网上线啦!coderunity.com
wx_fmt=jpeg" alt="" style="max-width:100%; height:auto!important"> 内容简单介 ...
- 利用crtmpserver搭建rtmp服务器
Google + 实践:最终直播成功. 记录一下. 这样.兴许就能够对代码进行改造,利用开源码实现:Android平台下.搭建rtmpserver.浏览器端利用flash播放视频. 代码架构为:ffm ...
- kbmmw 5.09 发布
New stuff ========= - Added kbmMWSmartBind.pas unit with optional kbmMWSmartBindVCL.pa ...
- Hibernate中的HQL语言
一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...
- docker: Dockerfile命令介绍
前一章介绍了Dockerfile创建镜像的方法,Dockerfile文件都是一些指令,因此要掌握Dockerfile就必须了解这些指令.这一章就介绍下Dockerfile的指令. From: 功能为指 ...
- BNUOJ 34978 汉诺塔 (概率dp)
题目分析:对于 i 个盘 , 须要移动多少步,取决于最大的盘子在哪个杆上.在C杆上,则最大的盘不须要移动,由于初始状态一定是满足盘由下到上盘子依次变小的,仅仅须要移动i - 1个盘.假设在A杆上,则首 ...
- git推送已有项目到gitee
有时候会接收一个项目,这个项目已有git版本控制,但git 远端服务器地址已失效(员工离职,原先是推送到他个人gitee上的). 要按照如下步骤,将该项目推送到gitee. 1.先去gitee上新建一 ...