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的子序列使得子序列中的 ...
随机推荐
- POJ-2229
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 19599 Accepted: 7651 Descrip ...
- httpservlet的service()、doget()、dopost方法
HttpServlet里的三个方法:service(HttpServletRequest req, HttpServletResponse resp) ,doGet(HttpServletReques ...
- 4.xpath注入详解
0x01 简介 XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL.表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息.XPath注入发 ...
- C++11 assert/static_assert
assert assert 是运行期断言,它用来发现运行期间的错误,不能提前到编译期发现错误,也不具有强制性,也谈不上改善编译信息的可读性,既然是运行期检查,对性能当然是有影响的,所以经常在发行版本中 ...
- C++11/14的新特性——更简洁
新的字符串表示方式——原生字符串(Raw String Literals) C/C++中提供了字符串,字符串的转义序列,给输出带来了很多不变,如果需要原生义的时候,需要反转义,比较麻烦. C++提 ...
- 一次偶然的点开一盏灯引发的SEO初识
事情是这样,不小心点开了dev tools的审计(audits)面板,点开了灯之后,画风如下 emmm, SEO 跑了满分也,好奇宝宝就往下滚到SEO区域,发现了如下新大陆 嗯,原来是应用满足了打钩的 ...
- 痞子衡嵌入式:微处理器CPU性能测试基准(Dhrystone)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是微处理器CPU性能测试基准Dhrystone. 在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone.MIPS.C ...
- Git 分支管理 Feature分支 强行删除分支
软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了, 所以,每添加一个新功能,最好新建一个feature分支, 在上面开发,完成后 ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)【A,B,C】
翻车!翻车! codeforces782A A题: 水. 代码: #include <bits/stdc++.h> using namespace std; typedef long lo ...
- [poj百练]2754:八皇后 回溯
描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后 ...