题意:每个人有一个DI值,现在有一个小黑屋,这些人的顺序可以利用这个小黑屋调整,调整方式是入栈出栈方式,也就是说,这里的方案是有卡特兰数个方式。

调整后使得 d1*0 + d2*1 + d3*2 + d4*3 ...... 最小。

分析:这个题目竟然会是区间DP。

考虑区间 [ L, R ] ,那么L,可以从任意位置出栈,枚举出栈位置,可以划分为两个部分,也就是说两个子问题,但是如何利用这两个子问题得到 d[L,R],

d[L,R] = 前一部分 + D[L]*(i-L) + 后一部分 + 后一部分进位。

其中,后一部分的进位是一个前缀和*进多少位。

#include <bits/stdc++.h>

using namespace std;

const int maxn = ;
const int inf = 0x3f3f3f3f; int a[maxn];
int d[maxn][maxn];
int su[maxn]; int dp(int L,int R) {
if(L>=R) return ;
if(d[L][R]!=-) return d[L][R];
d[L][R] = inf;
for(int i=L;i<=R;i++) {
d[L][R] = min(d[L][R], dp(L+, i)+(i-L)*a[L]+dp(i+, R)+(su[R]-su[i])*(i+-L));
}
return d[L][R];
} int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
int kase = ;
while(t--) {
int n;
scanf("%d",&n); memset(d,-,sizeof(d));
memset(su,,sizeof(su)); for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
su[i] = su[i-] + a[i]; //前缀和
} printf("Case #%d: %d\n",kase++,dp(,n)); }
return ;
}

最新文章

  1. POJ 2533 动态规划入门 (LIS)
  2. 单节点nginx为两台apache服务器提供负载均衡
  3. spring中配置了事务,数据业务层捕获异常,事务配置不成功?
  4. 【源码下载】分享一个支持自安装自卸载的Windows服务
  5. [NOIP2007]奖学金
  6. linux之access函数解析
  7. 【Android - 框架】之RxJava的使用
  8. hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结
  9. 25个最佳最闪亮的Eclipse开发项目
  10. 使用vim编写hexo文档,并用ultisnips/snipmates/snippets插件补全
  11. 关于React Native的那些坑
  12. 鸟哥的Linux私房菜笔记第四章
  13. 一道php笔试题
  14. nodejieba中文分词
  15. C#语言基础知识
  16. .netcore部署Linux并结合Nginx反向代理 get started
  17. 题目1447:最短路(Floyd算法)
  18. caffe安装编译问题-ImportError: No module named skimage.io
  19. android笔记 : Content provider内容提供器
  20. 离线下载解决Nuget程序包及其依赖包的方法

热门文章

  1. GreenPlum 大数据平台--web监控
  2. journalctl 中文手册
  3. apache CXF quickstart
  4. unity的assetbundle的自动命名,以我的命名lua为例
  5. log4j的AppenderLayout格式符
  6. matlab安装过程的被要求的配置程序
  7. pat1011. World Cup Betting (20)
  8. HDU 1394——Minimum Inversion Number——————【线段树单点增减、区间求和】
  9. django(6)model表语句操作、Form操作、序列化操作
  10. [转]Asp.net MVC中的ViewData与ViewBag