UVA-10003 Cutting Sticks 动态规划 找分界点k的动规
2024-08-31 10:47:15
题目链接:https://cn.vjudge.net/problem/UVA-10003
题意
有根棍子,上面有些分割点(n<50),每次按分割点切割棍子时,费用为当前棍子的长度。
问有什么样的顺序,使总费用最小。
思路
简单题,设dp[i][j]为在分割点ij之间棍子的最小切割费用。
有转移方程dp[i][j]=min( dp[i][k]+dp[k][j] )+pos[j]-pos[i]
注意边界条件dp[i][i+1]=0意思是i~i+1之间不需要切割费用。
提交过程
WA | 边界条件给错 |
WA | 输出错 |
AC |
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=50+20, INF=0x3f3f3f3f;
int n, l;
int pos[maxn], data[maxn][maxn];
int dp(int l, int r){
if (r<=l+1) return 0;
if (data[l][r]) return data[l][r];
data[l][r]=INF;
for (int k=l+1; k<r; k++)
data[l][r]=min(data[l][r], dp(l, k)+dp(k, r));
return data[l][r]+=pos[r]-pos[l];
}
int main(void){
while (scanf("%d", &l)==1 && l){
memset(data, 0, sizeof(data));
scanf("%d", &n);
pos[0]=0; pos[n+1]=l;
for (int i=1; i<=n; i++)
scanf("%d", &pos[i]);
printf("The minimum cutting is %d.\n", dp(0, n+1));
}
return 0;
}
Time | Memory | Length | Lang | Submitted |
---|---|---|---|---|
150ms | 691 | C++ 5.3.0 | 2018-08-06 09:13:55 |
最新文章
- 基于python编写的天气抓取程序
- PHP 7 的新特性
- [日常训练]常州集训day3
- poj3372 Candy Distribution
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
- 单点登录filter根据redis中的key判断是否退出
- Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
- 点击播放js
- 10个利用Eclipse调试Java的常见技巧
- 有关C语言学习的调查
- c语言_头文件
- angular中的路径问题
- appium+python搭建自动化测试框架_Tools安装(一)
- EffectiveC++ 第3章 资源管理
- xml可视化编辑器
- 如何入门vue之一
- HTML背景图片的相对位置设置
- C#延时函数
- DP的学习
- JAVA中通过JavaCV实现跨平台视频/图像处理-调用摄像头
热门文章
- Maven编译、打war包
- css 书写推荐顺序
- video标签实现简单视频背景+遇到问题(视频无法显示,不能自动播放)
- 学习SCSS
- POJ 2187 Beauty Contest( 凸包求最远点对 )
- poj 2954 Triangle 三角形内的整点数
- 如何解决zabbix中自定义监控mysql因密码造成的 Warning
- thinkPHP利用ajax异步上传图片并显示、删除
- [luogu] P3294 [SCOI2016]背单词 (贪心)
- (转)redis源代码分析 – event library