<题目链接>

题目大意:

有$n$个人排成一排要上台表演,每个人有一个屌丝值$pi$。第i个上台表演的人,他的不满意度为$(i-1)*p_i$。现在有一个类似于栈的黑屋子,你可以让某些人进入这个黑屋子。这些人要按照初始顺序来调整,对于排在最前面的人,有两种选择,让他直接上场或者先让他入栈。现在请你选择一个合理的上场顺序,使得最后总的不满意度最小。

解题分析:

因为是根据栈来调整上场顺序,所以将$p_i$大的人安排的尽可能靠前,这个贪心策略是错误的(很容易找到反例)。

考虑用区间DP,dp[l][r]表示区间[l,r]内的最小价值,再枚举第$i$个人的上场次序,同时dp进行状态的转移 $$dp[l][r]=min(dp[l][r],(k-l)*val[l]+dp[l+1][k]+dp[k+1][r]+(sum[r]-sum[k])*(k+1-l));$$详细题解见 >>>

记忆化搜索版

#include <bits/stdc++.h>
using namespace std; const int INF = 0x3f3f3f3f , N = ;
int n;
int dp[N][N],sum[N],val[N]; int DP(int l,int r){
if(l>=r)return ;
if(dp[l][r]!=-)return dp[l][r];
dp[l][r]=INF;
for(int k=l;k<=r;k++) //枚举第i个人是第几个上场的
dp[l][r]=min(dp[l][r],(k-l)*val[l]+DP(l+,k)+DP(k+,r)+(sum[r]-sum[k])*(k+-l)); //因为[k+1,r]的人的上场次序是处理的相对次序,所以这里要加上(sum[r]-sum[k])*(k+1-l)才能表示绝对次序造成的价值
return dp[l][r];
}
int main(){
int T,ncase=;cin>>T;
while(T--){
memset(dp,-,sizeof(dp));
cin>>n;sum[]=;
for(int i=;i<=n;i++){
scanf("%d",&val[i]);
sum[i]=sum[i-]+val[i];
}
printf("Case #%d: %d\n",++ncase,DP(,n));
}
}

普通区间DP

#include <bits/stdc++.h>
using namespace std; const int N = ;
int n,dp[N][N],val[N],sum[N]; int main(){
int T,ncase=;cin>>T;
while(T--){
scanf("%d",&n);
sum[]=;
for(int i=;i<=n;i++)
scanf("%d",&val[i]),sum[i]=sum[i-]+val[i];
memset(dp,,sizeof(dp)); //dp初始化
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)dp[i][j]=1e9;
for(int len=;len<=n-;len++){
for(int l=;l<=n-len;l++){
int r=l+len;
for(int k=l;k<=r;k++)
dp[l][r]=min(dp[l][r],(k-l)*val[l]+dp[l+][k]+dp[k+][r]+(sum[r]-sum[k])*(k+-l)); //因为[k+1,r]的人的上场次序是处理的相对次序,所以这里要加上(sum[r]-sum[k])*(k+1-l)才能表示绝对次序造成的价值
}
}
printf("Case #%d: %d\n",++ncase,dp[][n]);
}
}

HDU 4283 You Are the One 【区间DP】的更多相关文章

  1. hdu 4283"You Are the One"(区间DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 有n个屌丝排成一排,每个屌丝都有一个不开心值a[ i ]( i=1,2,3,.. ...

  2. HDU 4283 You Are the One ——区间dp

    参考了许多大佬  尤其是https://blog.csdn.net/woshi250hua/article/details/7973824这一篇 ,最后我再加一点我的见解. 大意是 给定一个序列,序列 ...

  3. hdu 4283 You Are the One 区间dp

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 4283 (第k个出场 区间DP)

    http://blog.csdn.net/acm_cxlove/article/details/7964594 http://www.tuicool.com/articles/jyaQ7n http: ...

  5. HDU 4283---You Are the One(区间DP)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4283 Problem Description The TV shows such as Y ...

  6. HDU 5900 QSC and Master (区间DP)

    题目链接   http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意:给出序列$A_{i}.key$和$A_{i}.value$,若当前相邻的两个数$A_{ ...

  7. HDU 5115 (杀狼,区间DP)

    题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, ...

  8. hdu 4632 子字符串统计的区间dp

    题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...

  9. HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索

    题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析:  枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...

  10. hdu 2476 (string painter) ( 字符串刷子 区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. Linux设备树(五 根节点)

    五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性.model属性我们在属性那节已经说过 ...

  2. 集成Tomcat环境到Eclipse中

    集成Tomcat环境到Eclipse中 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装Eclipse环境 1>.安装JDK环境 官方地址:https://www.or ...

  3. 1.4分布式-通讯协议TCP/IP

    服务器和浏览器的通讯依靠http协议,今天就来分析一下http协议的具体内容以及https的加密过程.除了这些协议,为了增加服务器和浏览器交互的可拓展性,也出现了rest风格的请求方式,方便调用接口. ...

  4. 分布式监控系统开发【day38】:主机存活检测程序解析(七)

    一.目录结构 二.入口 1.文件MonitorServer.py import os import sys if __name__ == "__main__": os.enviro ...

  5. 迭代器模式-Iterator(Java实现)

    迭代器模式-Iterator 用于访问一个集合中的各个元素, 而又不会暴露集合的内部的细节. 本文展示的例子就是, 在猫群组里, 用迭代器遍历每一只猫. 本文章的例子的继承关系图如下: 其中: Cat ...

  6. Aurora的安装和中文配置

    转载自: http://blog.csdn.net/wdkirchhoff/article/details/72903885 要用 Aurora 很烦躁. 时不时出问题... 看看以下转载的吧. Au ...

  7. 2.12 for循环

    for循环 像while循环一样,for可以完成循环的功能. 在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等. for循环的格式 for 临时变量 in 列表或者字符串 ...

  8. 有趣的若干个AI项目

    一.遗传算法跑贪吃蛇 1.下载processing,下载地址是:https://processing.org/download ,直接解压打开即可. 2.下载SnakeAI源码,下载地址是:https ...

  9. BootStrap分页教程

    https://www.cnblogs.com/laowangc/p/8875526.html https://www.cnblogs.com/yinglunstory/p/6092834.html ...

  10. lucene学习的小结

    pom.xml设置 <dependency> <groupId>junit</groupId> <artifactId>junit</artifa ...