HDU4283(区间dp)详解

博客详细介绍了HDU4283问题的解决思路,通过区间动态规划(dp)方法求解使愤怒值最小的排列方案。解释了如何构建dp状态并进行递推,分析了在不同情况下人的愤怒值计算,并提到了该问题转化为子问题的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:有 n 个人,每个人有一个diaosi[i]值,如果第 i 个人排在第 k 位置,则他的愤怒值就为diaosi[i]*(k-1);

等待过程中有一个黑屋子,可以把人暂时放到黑屋子里。使总的愤怒值最小;

输入要求:T组数据,n个人,每个人的愤怒值

输出要求:Case #2: 最小愤怒值

思路引导:这是一道区间dp题。我们用dp[i][j]表示第i个人到第j个人unhappiness总和的最小值,因此dp[1][n]就是我们所要求的的值。怎么求呢?这种题肯定是转换成一些子问题,不断地的递推求解。我们来考虑第i个人的情况,在区间[i,j]中,第i个人可能是第一个走的,也可能是第j-i+1 个走的,所以假设第i个人是第k个走的,根据题目有第i 个人的这里写代码片unhappiness值为(k-1)D[i].那么从i+1 开始的k-1个人都是在i 之前走的,此时就会出现一个子问题——dp[i+1][i+1+k-1+1].这个区间的人都是已经走过的,那么在[i,j] 区间里,从i+k到j 都是还没有走的,那么他们就要继续等待,把它们看成一个整体,即unhappyiness 值为k(sum[j]-sum[i+k-1]).这里写图片描述
这里写图片描述

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值