传送门

You Are the One

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4042    Accepted Submission(s):
1876

Problem Description
  The TV shows such as You Are the One has been very
popular. In order to meet the need of boys who are still single, TJUT hold the
show itself. The show is hold in the Small hall, so it attract a lot of boys and
girls. Now there are n boys enrolling in. At the beginning, the n boys stand in
a row and go to the stage one by one. However, the director suddenly knows that
very boy has a value of diaosi D, if the boy is k-th one go to the stage, the
unhappiness of him will be (k-1)*D, because he has to wait for (k-1) people.
Luckily, there is a dark room in the Small hall, so the director can put the boy
into the dark room temporarily and let the boys behind his go to stage before
him. For the dark room is very narrow, the boy who first get into dark room has
to leave last. The director wants to change the order of boys by the dark room,
so the summary of unhappiness will be least. Can you help him?
 
Input
  The first line contains a single integer T, the
number of test cases.  For each case, the first line is n (0 < n <=
100)
  The next n line are n integer D1-Dn means the value of diaosi of boys
(0 <= Di <= 100)
 
Output
  For each test case, output the least summary of
unhappiness .
 
Sample Input
2
  
5
1
2
3
4
5

5
5
4
3
2
2

 
Sample Output
Case #1: 20
Case #2: 24
 
【题目大意】
n个人参加节目,每人都有一个屌丝值D,如果他第k个上场,那么他的不高兴值为(k-1)*D,因为他要等k-1个人。
节目有个小黑屋(是个栈,满足栈的性质)可以改变入场顺序。求最小不高兴值。
【思路】
区间dp。
现在上场的人的可能性有..栈顶的那个人,队伍中的那个人,队伍中的人进栈后,队首的那个人。
用dp[i][j]表示第i个人到第j个人的最小不高兴价值。
区间dp要进行区间合并,进行枚举断点k。
dp[i][j]由dp[i][k]和dp[k+1][j]转移而来。
可以第i--k个人先上舞台,k+1--j后上舞台。
也可以第k+1---j个人先上舞台,第i--k个人后上舞台,这就要求i--k这些人进栈,那么再上舞台的顺序就是原来的逆序,不高兴值预处理。
注意,对于dp[i][j]是个独立的区间,看成第i个就是这个区间的第一个进行处理。只需在合并时处理一下。
转移方程:
dp[i][j]=min(dp[i][j],min{dp[i][k]+dp[k+1][j]+(sum[j]-sum[k-1])*(k-i+1)  ,dp[k+1][j]+v[i][k]+(sum[k]-sum[i-1])*(j-k) }) 
转移方程指的是在上述两种情况中寻找最小值,其中sum是因为我们在处理dp[i][j]时是将i看做第一个处理的,
如果说i--k个先进入,k+1--j后进入(第一种情况),k+1--j每个人前面多了k-i+1个人,所以要加上产生的不高兴值。
记忆化搜索也可做。
最大值0x7fffffff(7个f为2147483647,3个f五位数)。
【code】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define inf 0x7fffffff
int n,t,kas;
int sum[],v[][],dp[][],a[];
void befr() {
for(int i=; i<=n; i++)
for(int j=i-; j>=; j--)
v[j][i]=v[j+][i]+a[j]*(i-j);
}
int main() {
scanf("%d",&t);
while(t--) {
memset(sum,,sizeof(sum));
memset(v,,sizeof(v));
scanf("%d",&n);
for(int i=; i<=n; i++) {
scanf("%d",&a[i]);
sum[i]=sum[i-]+a[i];
}
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
if(i!=j)
dp[i][j]=inf;
else
dp[i][j]=;
befr();
for(int j=; j<=n; j++)
for(int i=j-; i>=; i--)
for(int k=i; k<j; k++) {
dp[i][j]=min(dp[i][j],min(dp[i][k]+dp[k+][j]+(sum[j]-sum[k])*(k-i+),dp[k+][j]+v[i][k]+(sum[k]-sum[i-])*(j-k)));
}
printf("Case #%d: %d\n",++kas, dp[][n]);
}
return ;
}

you are the one(区间dp)的更多相关文章

  1. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  2. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  3. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  4. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  5. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  6. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  7. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  8. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

  9. Uva 10891 经典博弈区间DP

    经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...

  10. 2016 年沈阳网络赛---QSC and Master(区间DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5900 Problem Description Every school has some legend ...

随机推荐

  1. Codeforces 552E Vanya and Brackets(枚举 + 表达式计算)

    题目链接 Vanya and Brackets 题目大意是给出一个只由1-9的数.乘号和加号组成的表达式,若要在这个表达式中加上一对括号,求加上括号的表达式的最大值. 我们发现,左括号的位置肯定是最左 ...

  2. TOT 傅立叶变换 FFT 入门

    HDU 1402,计算很大的两个数相乘. FFT 只要78ms,这里: 一些FFT 入门资料:http://wenku.baidu.com/view/8bfb0bd476a20029bd642d85. ...

  3. 注解@RequestMapping value 用法

    本文引自:https://blog.csdn.net/qq_33811662/article/details/80864784 RequestMapping是一个用来处理请求地址映射的注解,可用于类. ...

  4. systemtap notes

    systemtap notes -- 10 June 2014 1 Systemtap systemtap是红帽开发的一款分析工具,如果你需要使用的话,最好在redhat的系统上,在 Ubuntu上兼 ...

  5. Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1”

    (2)服务器收到http请求报文,返回http响应报文 Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1” Tomcat服务器解析“GET /JavaWebDe ...

  6. android 播放MP3

    <?xml version="1.0" encoding="utf-8"?> <!-- 定义当前布局的基本LinearLayout --> ...

  7. 如何使用RDP跳过网络隔离?

    简介 本文我将向大家演示,如何通过RDP跳转盒进入隔离/受保护的网络.下图是我为该场景制作的拓扑图: 简要说明: LAN是一种扁平的工作站和服务器网络. 一些服务器(包括RDP跳转盒)无法与Inter ...

  8. python异常捕获异常堆栈输出

    python异常捕获异常堆栈输出 学习了:https://blog.csdn.net/chris_grass/article/details/77927902 import traceback def ...

  9. 手机加载优化 - 2x、3x图

    人们常说,现在的流量不值钱了,图越大越好咯! 我想说的是,浏览器虽然不值钱了,但速度还是略快吧! 文章来自:UI妹儿 icon_alipay.png→iPhone 1-3代的手机(已经不考虑了) ic ...

  10. SDIO总线(一)

    SDIO接口是在SD内存卡接口的基础上发展起来的接口.SDIO接口兼容曾经的SD内存卡.而且能够连接SDIO接口的设备. SDIO1.0标准定义了两种类型的SDIO卡: 1.全速的SDIO卡.传输率能 ...