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;
}
 
时间: 2024-11-07 09:26:23

HDU 4283:You Are the One 区间DP好题的相关文章

HDU 4283 You Are the One 区间dp

题意: 题意好复杂... 给定n个人,从左到右排好队. 他们依次从左到右离开队伍. 每个人有个权值d 当某个人是第k-th离开队伍的,那么不开心值为 d*(k-1) 有一个操作,对于一个子序列,可以把前面一段翻转. 问最小的不开心值和. #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<q

hdu 4283&quot;You Are the One&quot;(区间DP)

传送门 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 temporari

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

http://blog.csdn.net/acm_cxlove/article/details/7964594 http://www.tuicool.com/articles/jyaQ7n http://blog.csdn.net/woshi250hua/article/details/7973824 记忆化搜索(15MS): #include <iostream> #include <string> #include <cstring> #include <cs

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

题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[0,i],推[0,i+1], 显然还要从i+1 处往回找,dp方程也简单: dp[j][i]=(dp[j+1][i]+dp[j][i-1]+10007-dp[j+1][i-1])%10007; 减去中间一段重复的 if(s[i]==s[j])dp[j][i]=(dp[j][i]+dp[j+1][i-

POJ 2411 &amp;&amp; HDU 1400 Mondriaan&#39;s Dream (状压dp 经典题)

Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12341   Accepted: 7204 Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series

HDU 4283---You Are the One(区间DP)

题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4283 Problem Description The TV shows such as You Are the One has been very popular. In order to meet the need of boys who are still single, TJUT hold the show itself. The show is hold in the Small

HDU 5900 QSC and Master (区间DP)

题目链接   http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意:给出序列Ai.key和Ai.value,若当前相邻的两个数Ai.key和Ai+1.key的最大公约数大于1,则可以把这两个数消去,同时消去Ai.value和Ai+1.value,每次消去得到的分数为Ai和Ai+1的value值,问最大可能得分. 注意:当Ai和Ai+1被消去后,Ai-1和Ai+2成为了新的相邻的数.若符合条件则可以继续消去. 思路:很明显是区间DP,但是我比赛中如何也

HDU 5151 Sit sit sit(区间DP)

HDU 5151 Sit sit sit 题目链接 区间DP+组合计数问题,转移方程为,每次选当前区间最后一个放的位置,然后乘上组合数C[区间长度][左区间长度] 代码: #include <cstdio> #include <cstring> typedef long long ll; const ll MOD = 1000000007; const int N = 105; int n, a[N]; ll dp[N][N], C[N][N]; int main() { C[1]

HDU 5396 Expression (MUT#9 区间DP)

[题意]:click here~~ [题目大意]: 给你一个一行包含n(2=<n<=100)个数字的式子,和一个字符串(2=<s<=100),字符串里包含三种运算符号:+,-,*,且s=n-1,也就是说在每两个数字之间,插入n-1个符号,位置已经在输入的时候固定了,现在你要做的就是可以自由安排符号的运算顺序,每轮选择之后,将会得到一个结果,求所有的结果的和 [思路]:区间DP: 先贴一下题解(感觉题解有个地方写错了): 设DP[l][r]:表示区间[l,r]这段里面能形成的答案的总

You Are the One(区间DP 好题)

You Are the One HDU - 4283 The TV shows such as You Are the One has been very popular. In order to meet the need of boys who are still single, TJUT hold the show itself. The show is hold in the Small hall, so it attract a lot of boys and girls. Now t