HDU 4283 You Are the One ——区间dp
参考了许多大佬 尤其是https://blog.csdn.net/woshi250hua/article/details/7973824这一篇 ,最后我再加一点我的见解。
大意是 给定一个序列,序列内的人有屌丝值Di,将这个序列进栈,第i个人如果是第k个出栈,那么最后的屌丝总值增加Di * (k-1), 求一个出栈序列使得总屌丝值最小。
这一题用到了一个性质,如果第1个人确定了是第k个出栈,那么第2~k个人一定在他之前出栈,而且k+1~n个人一定在他之后出栈。这个可以随便拿纸模拟一下来得出结论。
然后区间划分的思路就有了,枚举一下k,处理出[l,r]区间l第k个弹出时的最小总屌丝值。最后dp[1][n][1]就是最终解。
代码如下:
#include<iostream>
#include<string.h>
using namespace std;
#define INF (1<<29)
#define ll long long
ll dp[][][],n,a[],ans;
ll solve(ll l,ll r,ll k)
{
if(l>r) return ; //无意义值直接返回
if(l==r) return a[l]*(k-); //递归到单点,意味着该值意义为“第l个人第k个出场带来的屌丝值”
if(dp[l][r][k]!=INF) return dp[l][r][k]; //不为INF代表该值之前走到过,就不用再走了,直接返回该值 ll qian,hou,qiank,houk,now;
// 根据之前的结论,我们把区间[l,r]分为三个部分 l、l+1~k、k+1~r for(int i=l;i<=r;i++)
{
houk=k+i-l+;//该值houk表示递归区间k+1~r时带入的k
qiank=k+i-l;//该值qiank示第l号人出场的序号
qian=solve(l+,i,k);//该值qian表示递归区间l+1~i时返回的最优值
hou=solve(i+,r,houk);//该值hou表示递归区间i+1~r时返回的最优值
now=a[l]*(qiank-);//l号选手的屌丝值
dp[l][r][k]=min(dp[l][r][k],qian+hou+now); //更新最优值
}
return dp[l][r][k];
}
int main()
{
ll i,j,k,l,ans,t,n;
//cout<<INF<<endl;
cin>>t;
l=;
while(t--)
{
l++;
cin>>n;
for(i=;i<=n;i++) cin>>a[i];
for(i=;i<=n;i++)
for(j=;j<=n;j++)
for(k=;k<=n;k++) dp[i][j][k]=INF;//提示这里的INF比较大 不能用memset来赋值 不然会出问题
ans=solve(,n,);
cout<<"Case #"<<l<<": "<<ans<<endl;
}
}
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
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 ...
随机推荐
- 关于 telegram中 callback_data <= 64bytes 的解决方法
解决方法: # bind data to uuid import uuid my_data = long_json_string my_uuid = uuid.uuid4() user_data[my ...
- 剑指offer——python【第2题】替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”. 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 理解 很容易想到用pytho ...
- 限时免费 | 12月6日,广州保利洲际酒店,ABC Summit 2018云智峰会来了!
随着科技的迅猛发展,人工智能技术也逐渐取得了各个突破.自20世纪70年代以来,作为计算机学科的一个分支,人工智能就被列为世界三大尖端技术之一.近年来,阿尔法狗战胜世界第一柯洁,使人工智能再度迎来新的热 ...
- InnoDB中锁的算法(2)
Ⅰ.上节回顾 session1: (root@localhost) [test]> select * from l; +---+------+------+------+ | a | b | c ...
- 更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9
更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9 解决办法:删除pod里导入的库文件,跑一下pod,再重新导入这些库文件,跑pod ...
- 【托业】【新东方托业全真模拟】TEST09~10-----P5~6
at no time 绝不,从不 takeover 收购 startup n.启动; 新兴公司(尤指新兴网络公司); 新兴公司,新开张的企业; specific具体的,特定的:factual 事实的, ...
- phpcms栏目点击选中
点击选中(没有二级栏目) {pc:content action="category" catid="0" num="4" siteid=&q ...
- Linux 命令整理 (有不正确的随时补充)
du 概述: Linux下命令,统计目录(或文件)所占磁盘空间的大小. 语法: du[-abcDhHklmsSx][-L<符号连接>][-X<文件>][--block-size ...
- SVN拉分支,合并分支
前提是:本地已安装SVN,且在SVN中新建好branch和tag目录 拉分支: 把svn内容下载到本地,然后右键TortoiseSVN-->Branch/tag... 上图中红框选择存放的路径, ...
- py-faster-rcnn
踩坑: 1. 服务器上训练: sh ./experiments/scripts/faster_rcnn_end2end.sh 会各种报错 有说是因为#!/bin/bash的问题,改过,不行. 改成如下 ...