HDU 4283:You Are the One 区间DP好题
String painter
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4283
题意:
有n个人参加选秀,每个人有一个Di值,Di值*(出场时间-1)决定他们的悲惨度,这i个人按顺序出场,但是在出场前可以通过一个栈略微调整出场顺序,输出调整后的总悲惨度最小值。
题解:
设dp[i][j]是区间[i,j]部分的最小悲惨值和,终点状态为dp[1][n]。可以发现,对于每个[i,j]区间不需要考虑 i 以前和 j 以后的部分,那么 i 就是第一个参赛选手,不妨在[i,j]内找到一个点 k 使得 i 进栈且在 k 点之后出栈,由于每个区间[i+1,k]内的值进栈后都需要出栈(废话= =),因此 i 点即是栈里的唯一一个元素 ,i 入栈对区间[i+1,k]的影响仅为sum[k]-sum[i](区间[i+1,k]整体左移了一次),而区间[k+1,j]则不受影响,所以状态转移方程dp[i][j]=min(dp[i][j],dp[i+1][k]-(sum[k]-sum[i])+a[i]*(k-1)+dp[k+1][j])
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=102;
int a[N],sum[N],dp[N][N];
int mmin(int x,int y)
{
return x<y?x:y;
}
void solve()
{
int T,n,Case=0;
scanf("%d",&T);
memset(dp,0,sizeof(dp));
while(T--)
{
scanf("%d",&n);
sum[0]=sum[n+1]=0;
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
sum[i]=sum[i-1]+a[i];
}
for(int len=0;len<n;++len)
{
for(int i=1;i+len<=n;++i)
{
int j=i+len;
dp[i][j]=dp[i][j-1]+a[j]*(j-1);
for(int k=i;k<=j;++k)//区间左端点i在第k点出栈
dp[i][j]=mmin(dp[i][j],dp[i+1][k]-(sum[k]-sum[i])+a[i]*(k-1)+dp[k+1][j]);
}
}
printf("Case #%d: %d\n",++Case,dp[1][n]);
}
}
int main()
{
solve();
return 0;
}
转载于:https://www.cnblogs.com/kiuhghcsc/p/5759727.html
HDU 4283:You Are the One 区间DP好题相关推荐
- 洛谷P3146 区间dp做题笔记
不是题解,不是题解,不是题解,纯属个人笔记,不知所言. 传送门:P3146 问:什么时候才能写的一手漂亮的dp? 答:夜深人静之时,魂归故里之日. 此题是一道基础的区间dp的题,看完题解犹豫片刻,之后 ...
- HDU 5693:D Game(区间DP)
D Game Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- hdu 4632 子字符串统计的区间dp
题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...
- HDU 5115 (杀狼,区间DP)
题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, ...
- 合并石子 区间dp水题
合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...
- HDU 5115 M - Dire Wolf 【区间dp】
传送门 Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if ...
- HDU 5968 异或密码(区间dp)
Problem Description 晨晨在纸上写了一个长度为N的非负整数序列{ai}.对于这个序列的一个连续子序列{al,al+1,-,ar}晨晨可以求出其中所有数异或的结果 alxoral+1x ...
- HDU - 2871 Memory Control(线段树+区间合并)好题!
题目链接:点击查看 题目大意:给定n个内存和m个操作,分别是: New x:从内存编号1开始向右查找,分配一个长度为x的空间,若找到输出区间的首地址,否则输出Reject New: Free x:释放 ...
- 石子归并 51Nod - 1021(区间DP入门题)
N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价.计算将N堆石子合并成一堆的最小代价. 例如: 1 2 3 4,有不少 ...
最新文章
- 《zabbix用户权限分配管理》-8
- 「查缺补漏」巩固你的 RocketMQ 知识体系
- 迁移物理solaris系统至一个区域
- 【整理】SAP货币汇率转换
- 用JS实现根据当前时间随机生成流水号或者订单号
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
- Oracle EBS 入门
- 数据挖掘:模型选择——集成算法与树模型
- [MySQL]触发器
- 如何在MacOS中进行声音内录
- excel2010服务器打开闪退
- 苹果计算机显示错误怎么按,教你解决苹果电脑装windows7提示磁盘分区错误的方法...
- 推荐一本老外给初学者学习ABAP的书籍,2012年12月上市。
- 为什么有人愿意将软件开源和共享?
- JPA中could not insert: 的解决办法
- 文件服务器禁用u盘复制数据,如何禁止U盘拷贝
- 当我精通vue2的源码dep和watcher的关系时
- 使用Python和Numpy构建神经网络模型
- CTFHub——Web技能树
- Kafka——Sender 线程分析
热门文章
- springboot旅游系统设计技术描述_5A旅游景区标识标牌系统业材料的工艺技术
- java 类加载器卸载,【深入明白Java虚拟机 】类加载器的命名空间以及类的卸载...
- python代码编写_高质量Python代码编写的5个优化技巧
- java io教程_Java IO教程
- jqueryui时间插件_jQueryUI工具提示插件
- jquery 查找祖先元素_如何获得jQuery中元素的第一个祖先
- 开课吧:浅析语音识别算法工程师能力要求
- 2021最新Java高频面试题,很适合大厂面试
- common-jdbc:一个基于SpringJdbcTemplate的高性能数据库操作工具类库
- nodejs基础整理