2017北京赛区J题
类型:三维动态规划
题意:
合并连续石头块,最终要合并成一块,求时间最短,每次只能连续合并L~R块石头,不能合并成一块时输出-1
题解:
- 利用动态规划解决两种分问题
- dp[l][r][k]:表示在区间l到r之间分成k堆石头的最小代价
- 当k=1时,转移方程为:dp[l][r][1]=min(dp[l][r][1],dp[l][i][x-1]+dp[i+1][r][1]+sum[l][r]);
- 当k>=2时,转移方程为:dp[l][r][k]=min(dp[l][r][k],dp[l][i][k-1]+dp[i+1][r][1]);
- 先dp当k=1的情况,然后还要从其l和r之间的间隔先枚举。
#include<bits/stdc++.h>
using namespace std;
int sum[105][105];
int a[105];
const int inf = 0x3f3f3f3f;
int dp[105][105][105];
int main()
{
int n,L,R;
while(scanf("%d%d%d",&n,&L,&R)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
memset(dp,inf,sizeof(dp));
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];
dp[i][j][j-i+1]=0;
}
}
int l,r;
for(int d=0;d<=n;d++)//枚举间距
{
for(l=0;l+d<=n;l++)//枚举l
{
r=l+d;
for(int i=l;i<r;i++)//枚举中间位置
{
for(int x=L;x<=R;x++)//一堆的dp
{
dp[l][r][1]=min(dp[l][r][1],dp[l][i][x-1]+dp[i+1][r][1]+sum[l][r]);
}
for(int k=2;k<=r-l+1;k++)//多堆的dp
dp[l][r][k]=min(dp[l][r][k],dp[l][i][k-1]+dp[i+1][r][1]);
}
}
}
if(dp[1][n][1]==inf) printf("0\n");
else printf("%d\n",dp[1][n][1]);
}
return 0;
}
2017北京赛区J题的更多相关文章
- 2017北京赛区H题
题目链接 题意:在n*m的矩阵中选择变换或者不变换一个数变成p,使得最大子矩阵和最小 1<=n,m<=150, -1000<=p<=1000; 题解: 他人题解链接 涉及到知识 ...
- [hdu5136]Yue Fei's Battle 2014 亚洲区域赛广州赛区J题(dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 现场赛的时候由于有个地方有点小问题,没有成功AC,导致与金牌失之交臂. 由于今天下 ...
- 2017北京国庆刷题Day7 morning
期望得分:100+0+100=200 实际得分:100+20+0=120 离散化搞搞 #include<cstdio> #include<iostream> #include& ...
- 2017北京国庆刷题Day5 afternoon
期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...
- 2017北京国庆刷题Day3 morning
期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...
- 2017北京国庆刷题Day2 afternoon
期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一 ...
- 2017北京国庆刷题Day2 morning
期望得分:100+100+40=240 实际得分:100+40+0=140 T1 一道图论神题(god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK ...
- HDU-4451-Dressing (2012年金华赛区J题)
Dressing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 2017北京国庆刷题Day4 morning
期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...
随机推荐
- Python 实例——进度条,文件读取
进度条: import sys import time for i in range(50): sys.stdout.write("*") sys.stdout.flush() t ...
- @RequestMapping @SessionAttributes @ModelAttribute注解用法
简介: @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestM ...
- CSS Tooltip(提示工具)
CSS Tooltip(提示工具) 提示工具在鼠标移动到指定元素后触发,可以在四个方位显示:头部显示.右边显示.左边显示.底部显示 一.基础提示框(Tooltip) 提示框在鼠标移动到指定元素上显示: ...
- 学习记录:交叉编译环境配置(buildroot and gdb&gdbserver)【转】
本文转载自:https://blog.csdn.net/zhy025907/article/details/52332528 1,背景 因为参加公司的路由器逆向培训,首先需要的就是环境的配置准备工作, ...
- MAC OS X的命令行技巧
##透明度#降低透明度defaults write com.apple.universalaccess reduceTransparency -bool true#恢复默认透明度defaults wr ...
- ThreadPoolExecutor源码浅析
目录 初始化 ctl变量 添加任务 addWorker方法 worker实现 执行任务 关闭连接池 参考 初始化 ThreadPoolExecutor重载了多个构造方法,不过最终都是调用的同一个: p ...
- linux下挂载ISO像镜文件
挂载命令(mount) 命令格式:mount [-t vfstype] [-o options] device dir其中:1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自 ...
- tornado异步(1)
1. 同步 我们用两个函数来模拟两个客户端请求,并依次进行处理: # coding:utf-8 def req_a(): """模拟请求a""&quo ...
- Linux用户及权限分配
一.用户分类 所有者 u; 所属组 g; 其它用户 o; 所有用户 a; 二.用户管理 //查看用户 id user //添加用户 useradd user //设置密码 passwd user // ...
- 配置spring boot 内置tomcat的accessLog日志
#配置内置tomcat的访问日志server.tomcat.accesslog.buffered=trueserver.tomcat.accesslog.directory=/home/hygw/lo ...