传送门

https://www.cnblogs.com/violet-acmer/p/9852294.html

题意:

  有n个屌丝排成一排,每个屌丝都有一个不开心值a[ i ]( i=1,2,3,.....n ),如果第 i 个屌丝第 k 个上场,那么他的不开心度就是(k-1)*a[ i ]。

  ∑ni=1(ki-1)*a[i]的最小值,其中ki指的是第i个屌丝第k个上场。

  关键条件"the director can put the boy into the dark room temporarily and let the boys behind his go to stage before him.",意思是导演可以通过将某个屌丝 i

  之前的屌丝 j 放入小黑屋中使屌丝 i 在屌丝 j 前上场,不过这个小黑屋非常狭窄,先进入的最后上场,就像栈一样。

  通过样例解释一下这句话:

  假设有5的屌丝

  id : 1  2  3  4  5

  a[]: 5  8  3  9  4

  按照当前的顺序,屌丝4是第4个上场的,如果想要让屌丝4第一个入场,那么,就需要将屌丝1,2,3依次放入小黑屋中,那么,屌丝1,2,3的上场顺序就是3,2,1。

题解:

  定义变量dp[ i ][ j ] : ∑ji=1(ki-1)*a[i]的最小值( 1≤ki≤len,len=j-i+1(当前区间屌丝人数) )。

  对于区间[ i, j ],屌丝 i 可以第 k 个上场,那么,其之后的相邻的 k-1 个屌丝一定在他之前全部上场,且他之前只有这 k-1 个屌丝上场,那么前 k 个屌丝的当前最小的

  不开心度就是 (k-1)*a[ i ]+dp[ i+1 ][ i+k-1 ],那么余下的 len-k 个屌丝的最小不开心度就是 dp[ i+k ][ j ]+k*( sum(j)-sum(i+k-1) );(sum[ ]是屌丝不开心值的前缀和)。

  所以dp转移方程就是 : dp[ i ][ j ]=min( dp[ i ][ j ],(k-1)*a[ i ]+dp[ i+1 ][ i+k-1 ] + dp[ i+k ][ j ]+k*( sum(j)-sum(i+k-1) ) );

AC代码:

 #include<iostream>
#include<cstdio>|
#include<cstring>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
const int maxn=+; int n;
int a[maxn];
int dp[maxn][maxn];
int sum[maxn]; int Solve()
{
mem(dp,);
for(int i=;i < n;++i)
for(int j=i+;j <= n;++j)
dp[i][j]=INF; for(int len=;len <= n;++len)
{
for(int i=;i+len- <= n;++i)
{
int j=i+len-;
for(int k=;k <= (j-i+);++k)
dp[i][j]=min(dp[i][j],(k-)*a[i]+dp[i+][i+k-]+dp[i+k][j]+k*(sum[j]-sum[i+k-]));
}
}
return dp[][n];
}
int main()
{
int t;
scanf("%d",&t);
for(int kase=;kase <= t;++kase)
{
scanf("%d",&n);
sum[]=;
for(int i=;i <= n;++i)
{
scanf("%d",a+i);
sum[i]=sum[i-]+a[i];
}
printf("Case #%d: %d\n",kase,Solve());
}
return ;
}

hdu 4283"You Are the One"(区间DP)的更多相关文章

  1. HDU 4283 You Are the One ——区间dp

    参考了许多大佬  尤其是https://blog.csdn.net/woshi250hua/article/details/7973824这一篇 ,最后我再加一点我的见解. 大意是 给定一个序列,序列 ...

  2. 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) ...

  3. HDU 4283 (第k个出场 区间DP)

    http://blog.csdn.net/acm_cxlove/article/details/7964594 http://www.tuicool.com/articles/jyaQ7n http: ...

  4. 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 ...

  5. HDU 5900 QSC and Master (区间DP)

    题目链接   http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意:给出序列$A_{i}.key$和$A_{i}.value$,若当前相邻的两个数$A_{ ...

  6. HDU 5115 (杀狼,区间DP)

    题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力.你杀死一只狼.你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, ...

  7. hdu 4632 子字符串统计的区间dp

    题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...

  8. HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索

    题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析:  枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...

  9. hdu 2476 (string painter) ( 字符串刷子 区间DP)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. python数学第二天【泰勒展开式】

    1. 泰勒展开式 推论1: 泰勒展开式的应用 推论2: 推论3:

  2. Java使用RabbitMQ之整合Spring(消费者)

    依赖包: <!--RabbitMQ集成spring--> <!-- https://mvnrepository.com/artifact/org.springframework.am ...

  3. 七、.net core下配置、数据库访问等操作实现

    配置读取 .net core下读取配置还是有点麻烦的,本身没有System.Configuration.dll,所以在进行配置前需要自行引用Microsoft.Extensions.Configura ...

  4. epoch、 iteration和batchsize区别

    转自: https://blog.csdn.net/qq_27923041/article/details/74927398 深度学习中经常看到epoch. iteration和batchsize,下 ...

  5. 解析$(this).data('type');

    html: <button type="button" class="layui-btn layui-btn-sm" data-type="ad ...

  6. Thread的其他属性方法

    from threading import Thread,currentThread,active_count import time def task(): print('%s is running ...

  7. struts2 的struts.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  8. servlet篇 之 servlet概念及其功能实现

    Servlet概念: 在JavaWeb中,把那些可以使用浏览器通过url的形式来访问的java类,叫做servlet. servlet就是java类中的一种,只不过这种java类有一个特殊的功能,就是 ...

  9. 【C/C++】递归算法

    所谓递归——函数的递归调用.c语言的这种特性给程序设计带来许多方便.尤其是接触数据结构时,会发现递归的出现频率非常之高,也行之有效~下面是笔者在接触递归这个东西时的一些个人总结和体会: 1.直接或间接 ...

  10. 用二分法定义平方根函数(Bisection method Square Root Python)

    Python里面有内置(Built-in)的平方根函数:sqrt(),可以方便计算正数的平方根.那么,如果要自己定义一个sqrt函数,该怎么解决呢? 解决思路:  1. 大于等于1的正数n的方根,范围 ...