/**
* 题目链接:https://cn.vjudge.net/problem/HihoCoder-1636
* 题目意思,石子合并,每次可以合并相邻的石子。每次可以x堆合并为一堆。
* x属于[l,r] 的闭区间。问最小花费。
*
* 思路:dp[i][j][k] 代表 区间i~j这个区间目前有k堆的最小花费;
* 那么一开始 dp[i][j][j-i+1]=0;
* 转移方程: dp[i][j][k]=min(dp[i][p][k-1]+dp[p+1][j][1]);
* 如果k在l到r范围可以还有合并,合并转移方程: dp[i][j][1]=min(dp[i][j][k]+sum[i][j]);
* sum[i][j],代表区间i~j的区间和。
*
* 疑问 转移方程为什么是:dp[i][j][k]=min(dp[i][p][k-1]+dp[p+1][j][1]);
* 而不是:dp[i][j][k]=min(dp[i][p][x]+dp[p+1][j][k-x]);
* 因为 dp[i][j][k] 由 dp[i][p][x]+dp[p+1][j][k-x] 等效于 dp[i][pp][k-1]+dp[pp+1][j][1]
* 故可以这样写。
**/ #include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h> using namespace std;
typedef long long int LL;
const int INF=0x3f3f3f3f; const int maxn=108; int n,l,r,a[maxn];
int dp[maxn][maxn][maxn] ,sum[maxn][maxn]; int main()
{
while(scanf("%d%d%d",&n,&l,&r)+1)
{
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
sum[i][i-1]=0;
for(int j=i;j<=n;j++) sum[i][j]=sum[i][j-1]+a[j];
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
dp[i][j][j-i+1]=0;
}
}
for (int len = 2; len <= n; len++)
{
for (int i = 1, j = i + len - 1; j <= n; i++, j++)
{
for (int p = i; p < j; p++)
{
for(int k=1;k<=len;k++)
{
dp[i][j][k]=min(dp[i][j][k],dp[i][p][k-1]+dp[p+1][j][1]);
if(l<=k&&k<=r) dp[i][j][1]=min(dp[i][j][1],dp[i][j][k]+sum[i][j]);
}
}
}
}
int ans=dp[1][n][1];
if(ans>=INF) ans=0;
printf("%d\n",ans);
}
return 0;
} /*
3 2 2
1 2 3
3 2 3
1 2 3
4 3 3
1 2 3 4
2 1 1
1 2 */

最新文章

  1. 【CentOS】虚拟机网络配置与远程登录
  2. Shiro 学习笔记(一)——shiro简介
  3. 搭建DHCP服务器以及DHCP中继服务器
  4. 如何查看windows xp系统的位数?
  5. HDU 4085 斯坦纳树
  6. OAuth2.0详解
  7. ecshop常用语句
  8. linq to sql 增删改查
  9. XSS脚本攻击漫谈
  10. Linq中的常用方法
  11. Postman 安装及使用入门教程(转)
  12. LNAMP 中的PHP探针
  13. 如何用webpack实现自动化的前端构建工作流
  14. Java微信公众平台开发_07_JSSDK图片上传
  15. tyvj4877 组合数
  16. NOSQL schema创建原则
  17. 从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
  18. 【JS】【2】ajax传的参数为数组时,后台接收为null的处理
  19. 变量和基本类型——复合类型,const限定符,处理类型
  20. vue滚动行为控制——页面跳转返回上一个页面保留滚动位置

热门文章

  1. python之开篇---hello world!
  2. Windows找出占用端口的进程
  3. Ax=λx=λIx
  4. Delphi编译指令说明
  5. OutOfMemoryError: Java heap space和GC overhead limit exceeded在Ant的Build.xml中的通用解决方式
  6. python调用java jython
  7. img标签中alt属性与title属性
  8. 让win10登陆时不再要求手动输入用户名
  9. 第二十一篇 socket
  10. mini2440移植uboot 2014.04(一)