HDU 4283 You Are the One (区间DP,经典)
题意:
某校举行一场非诚勿扰,给定一个出场序列,表示n个人的屌丝值,如果他是第k个出场的,他的不满意度为(k-1)*diao[i]。为了让所有人的屌丝值之和更小,导演设置一个栈,可以将部分人装进栈中,来改变序列。也就是说,要么按照给定序列上场,要么将某个人前面部分人装进栈,让该人先出场,再让栈中的人出场,都行。问屌丝值之和最少可以是多少?
思路:
想挫了,哎~
如果考虑区间p[1->n]的出场次序时,只考虑p[1]是第几个出场的就行了,假设是第k个,那么区间p[2->k]就必须比p[1]先出场(想想为什么),而p[k+1->n]就在p[1]之后出场了。那么不就分成了两个子问题了吗?只要在处理[L,R]时保证其任一子区间都已经考虑过了,就可以完成转移了。比p[j]后出场的,整个区间的dp值要上升了,因为他们的出场顺序变成k+1~n了。
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#define pii pair<int,int>
#define INF 0x7f3f3f3f
#define LL long long
using namespace std;
const double PI = acos(-1.0);
const int N=; int d[N], dp[N][N], sum[N], n; int cal()
{
memset(dp, , sizeof(dp)); //初始化
for(int i=; i<=n; i++)
for(int j=i+; j<=n; j++)
dp[i][j]=INF; for(int j=; j<=n; j++)
{
for(int i=j-; i>; i--)
{
for(int k=; k<=j-i; k++) //考虑让d[i]成为第k+1个出场
{
int t= d[i]*k + dp[i+][i+k] + dp[i+k+][j]+(k+)*(sum[j]-sum[i+k]);
dp[i][j]=min(dp[i][j], t );
}
}
}
return dp[][n];
} int main()
{
freopen("input.txt", "r", stdin);
int t, Case=;cin>>t;
while( t-- )
{
sum[]=;
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d",&d[i]);
sum[i]=sum[i-]+d[i];
}
printf("Case #%d: %d\n",++Case, cal());
}
return ;
}
AC代码
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,以后就 知道了,若已经知道[ ...
- POJ 3280 Cheapest Palindrome (区间DP) 经典
<题目链接> 题目大意: 一个由小写字母组成的字符串,给出字符的种类,以及字符串的长度,再给出添加每个字符和删除每个字符的代价,问你要使这个字符串变成回文串的最小代价. 解题分析: 一道区 ...
- HDU 2993 MAX Average Problem(斜率DP经典+输入输出外挂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给出n,k,给定一个长度为n的序列,从其中找连续的长度大于等于k的子序列使得子序列中的 ...
随机推荐
- boost编译配置及简单使用
boost编译配置及简单使用 1.下载 http://www.boost.org/ 2.编译: A.解压 boost_1_55_0.zip 到boost路径 B.运行 bootstrap.bat. 会 ...
- 1、在 Windows 上安装 OpenCV-Python & ubuntu16.04安装 opencv
Goals In this tutorial We will learn to setup OpenCV-Python in your Windows system. Below steps are ...
- CentOS快速搭建LAMP环境
LAMP -- Linux Apache MySQL PHP 在CentOS安装的顺序,我一般是Apache -> MySQL -> PHP 第一步.安装并配置Apache 1.使用yu ...
- ZOJ - 4104 Sequence in the Pocket(思维+元素移至列首排序)
Sequence in the Pocket Time Limit: 1 Second Memory Limit: 65536 KB DreamGrid has just found an ...
- 分类---Logistic Regression
一 概述 Logistic Regression的三个步骤 现在对为什么不使用均方误差进行分析(步骤二的) 由上图可以看出,当距离目标很远时,均方误差移动速率也很慢,不容易得到好的结果. Discri ...
- PHP中GD库是做什么用的? PHP GD库介绍11111111
什么是gd库? gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...
- Linux之常用命令简析
ls cd mkdir rmdir touch ln cp rm mv 1.ls 显示当前目录下的文件及文件夹(不显示隐藏的) -l 显示详细信息 --all 显示隐藏的文件及文件夹(就是显 ...
- GO:字符串Slice后乱码问题
遇到的问题:用Slice 直接截取字符串的时候会出现乱码现象 package main import ( "fmt" ) func main() { str := "我的 ...
- 汇总各个部门当前员工的title类型的分配数目,结果给出部门编号dept_no、dept_name、其当前员工所有的title以及该类型title对应的数目count
CREATE TABLE `departments` (`dept_no` char(4) NOT NULL,`dept_name` varchar(40) NOT NULL,PRIMARY KEY ...
- Unity ShadowMapping
原理: 场景中一个plane,一个cube,一个light,一个mainCamera 为了在plane上呈现cube的shadow,先在light上放一个lightCamera(位置方向跟light相 ...