hdu: You Are the One(区间DP)
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 hall, so it attract a lot of boys and girls. Now there are n boys enrolling in. At the beginning, the n boys stand in a row and go to the stage one by one. However, the director suddenly knows that very boy has a value of diaosi D, if the boy is k-th one go to the stage, the unhappiness of him will be (k-1)*D, because he has to wait for (k-1) people. Luckily, there is a dark room in the Small hall, so the director can put the boy into the dark room temporarily and let the boys behind his go to stage before him. For the dark room is very narrow, the boy who first get into dark room has to leave last. The director wants to change the order of boys by the dark room, so the summary of unhappiness will be least. Can you help him?
Input
The first line contains a single integer T, the number of test cases. For each case, the first line is n (0 < n <= 100)
The next n line are n integer D1-Dn means the value of diaosi of boys (0 <= Di <= 100)
Output
For each test case, output the least summary of unhappiness .
输入样例
2
5
1
2
3
4
5
5
5
4
3
2
2
输出样例
Case #1: 20
Case #2: 24
子区间划分:由于栈的特点,区间的第一个元素在第k位出栈,则(1,k-1)(k+1,n)互相独立
注意dp数组的赋值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=400,inf=0x3f3f3f3f;
int a[N],s[N],dp[N][N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int T;cin>>T;
for(int t=1;t<=T;++t)
{
int n;
cin>>n;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;++i)
{cin>>a[i];
s[i]=a[i]+s[i-1];
}
for(int i = 0; i <= n; i++)
for(int j = i+1; j <= n; j++)
dp[i][j] = inf;//注意初始化只有成立区间赋值为inf
//dp[i][j]表示第i个人以i为起点
//第k个出场,k从i到j的相对焦虑最小值
for(int len=2;len<=n;++len)
for(int i=1;i<=n;++i)
{
int j=i+len-1;
if(j>n) break;
for(int k=i;k<=j;++k)//第i个人在第k个出场
{
dp[i][j]=min(dp[i][j],(k-i)*a[i]+dp[i+1][k]+dp[k+1][j]
+(k-i+1)*(s[j]-s[k]));
//i在第k个出场,则子区间为(i+1,k) (k+1,j)
}
}
cout<<"Case #"<<t<<": "<<dp[1][n]<<'\n';
}
return 0;
}
hdu: You Are the One(区间DP)的更多相关文章
- hdu 4597 + uva 10891(一类区间dp)
题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...
- HDU 2476 String painter (区间DP)
题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...
- HDU 4597 Play Game(区间DP(记忆化搜索))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 题目大意: 有两行卡片,每个卡片都有各自的权值. 两个人轮流取卡片,每次只能从任一行的左端或右端 ...
- HDU 5151 Sit sit sit 区间DP + 排列组合
Sit sit sit 问题描述 在一个XX大学中有NN张椅子排成一排,椅子上都没有人,每张椅子都有颜色,分别为蓝色或者红色. 接下来依次来了NN个学生,标号依次为1,2,3,...,N. 对于每个学 ...
- hdu 5115 Dire Wolf(区间dp)
Problem Description Dire wolves, also known as Dark wolves, are extraordinarily large and powerful w ...
- HDU 2476 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total ...
- HDU 5115 Dire Wolf ——(区间DP)
比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: #inc ...
- hdu 3632 A Captivating Match(区间dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3632 题意:n个人进行比赛,每个人有一个价值a[i],最后冠军只有一个,只能相邻两个人进行 ...
- HDU 5151 Sit sit sit 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5151 题解: 有n个椅子,编号为1到n. 现在有n个同学,编号为1到n,从第一个同学开始选择要坐的位 ...
随机推荐
- BUUCTF-[GXYCTF2019]Ping Ping Ping
一道命令执行题目 一.基础知识 Linux shell特殊字符(参考链接) [;]作为多个命令语句的分隔符(Command separator [semicolon]). 要在一个语句里面执行 ...
- lua-table类的继承
--男人类man = {name = "man",age=123}--继承空间man.__index=man--儿童类child= {}--继承setmetatable(child ...
- Hyper-V虚拟机在Win2019server中共用一个公网IP
Hyper-V虚拟机在Win2019server中共用一个公网IP 有时生产环境中希望一台宿主机上的多台虚拟机共用一个IP出口,按以下操作处理即可. 环境: Windows 2019 server D ...
- C CODE STYLE 每天瞅一两眼
阅读进度:只读到了swich 转载于:https://users.ece.cmu.edu/~eno/coding/CCodingStandard.html C Coding Standard C Co ...
- CTreeCtrl中通过单击获取当前选项文本
新建了一个NM_Click消息响应函数,用hParent = m_TreeCtrl.GetSelectedItem();m_TreeCtrl.GetItemText(hParent);获取当前选中的文 ...
- eggjs 在vscode调试
https://eggjs.org/zh-cn/core/development.html?spm=ata.13261165.0.0.3c2f2be9w2ozd8#%E4%BD%BF%E7%94%A8 ...
- (一)REDIS之常见数据结构及操作
(一)基本数据结构 1.1 String结构: String底层结构是动态字符串,可修改指定位置数据,通过预分配冗余空间减少内存的频繁分配,实际分配的空间capacity一般要高于实际字符串长度len ...
- sqlserver存储过程学习
存储过程学习 一.定义变量 --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar ...
- QPushButton CSS样式
QPushButton:!hover { color:white; font: 20pt "楷体"; border-radius:10px; border:1px solid rg ...
- 第八章:diff
1.git diff命令的格式 1]可以使用git diff命令的来源,(任意树对象.工作目录.索引) 2]git diff命令进行树比较时,可以通过(提交名.分支名.标签名) 3]git d ...