HDU 4283 You Are the One 【区间DP】
<题目链接>
题目大意:
有$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】的更多相关文章
- hdu 4283"You Are the One"(区间DP)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 有n个屌丝排成一排,每个屌丝都有一个不开心值a[ i ]( i=1,2,3,.. ...
- HDU 4283 You Are the One ——区间dp
参考了许多大佬 尤其是https://blog.csdn.net/woshi250hua/article/details/7973824这一篇 ,最后我再加一点我的见解. 大意是 给定一个序列,序列 ...
- 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) ...
- HDU 4283 (第k个出场 区间DP)
http://blog.csdn.net/acm_cxlove/article/details/7964594 http://www.tuicool.com/articles/jyaQ7n http: ...
- 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 ...
- HDU 5900 QSC and Master (区间DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意:给出序列$A_{i}.key$和$A_{i}.value$,若当前相邻的两个数$A_{ ...
- HDU 5115 (杀狼,区间DP)
题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, ...
- hdu 4632 子字符串统计的区间dp
题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- hdu 2476 (string painter) ( 字符串刷子 区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- magento2 - Invalid credentials for 'https://repo.magento.com/packages.json', aborting.
错误如下: 登陆:https://developer.magento.com/找到路径-创建公钥与私钥: Developer Portal -> My Access Keys -> Cre ...
- ElasticSearch6.5.0 【Java客户端之REST Client】
说明 High Level Client 是基于 Low Level Client 的.官方文档如下: * https://www.elastic.co/guide/en/elasticsearch/ ...
- Web概述
Web概述 1. JavaWeb 使用java开发的基于互联网的项目 2. 软件架构 C/S:客户端服务器架构 优点:用户体验好,很多数据在本地 缺点:安装.开发.部署.维护麻烦 B/S:浏览器服务器 ...
- springboot集成elasticsearch遇到的问题
public interface EsBlogRepository extends ElasticsearchRepository<EsBlog,String>{ Page<EsBl ...
- for 循环 与forEach 里面return 的区别
for 循环里面 return 可以直接终止 跳出 循环 forEach 是中断本次循环 直接 下一个循环 forEach想要取到值之后 直接跳出循环 可以用 try catch let arr = ...
- Django之验证码
一.自己生成验证码 二.极验科技互动验证码 使用前步骤:下载官网文件——pip install geetest——引入其封装的js模块 代码分为三段:生成验证码——显示验证码——验证验证码. from ...
- 读书笔记-JavaScript高级程序设计(1)
1.组合继承 (JavaScript 中最常用的继承模式 ) (position: page168) (书中定义了两个变量名 SuperType SubType 乍一看 感觉不太能区分,我将改为 ...
- LNMP 下使用命令导出导入 MySQL 数据库
导出数据库 导出数据库为 db_wp.sql.gz 文件: 1 mysqldump -u数据库用户名 -p数据库密码 --add-drop-table --complete-insert 数据库名 | ...
- Vue项目中使用webpack配置了别名,引入的时候报错
chainWebpack(config) { config.resolve.alias .set('@', resolve('src')) .set('assets', resolve('src/as ...
- django 实战篇之路由层
路由层 如何给网页添加首页及尾页 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',views.test), url(r'te ...