uva10003 - Cutting Sticks(简单动规)
来源:互联网 发布:沈阳工业大学知乎 编辑:程序博客网 时间:2024/05/20 11:22
第一道动规题目,昨天看的题目,今天才做出来,,昨天理解错题意了,
题目说的是绝对切割长度,而不是相对的,请注意。。。
思路:
对切割顺序进行枚举,
对于需要切割的长度【25,50,75】则寻找第一次切割的位置。所以对位置25,50,75各来一次。其实这样还是暴力,只不过表格记录了已经计算过的状态,省时一些罢了。
这里我用的是从底向上递推来填表的
注意这里的小技巧:对于【25,50,75】来说。存的时候把0和100也要存进去。【0,25,50,75,100】
状态方程:f[m][n] = min{f[m][k]+f[k][n]+a[n]-a[m];}(m<k<n)
代码如下:
#include <cstdio>#define N 55#define INF 0xfffffffint l, n, a[N], dp[N][N];void solve(){ for(int i = 1; i < n; i++) dp[i][i+1] = 0; for(int len = 2; len < n; len++) for(int s = 1; s <= n-len; s++) { int &ans = dp[s][s+len], tt; ans = INF; for(int k = s; k < s+len; k++) { tt = dp[s][k]+dp[k][s+len]+a[s+len]-a[s]; ans = ans>tt?tt:ans; } }}int main(){ while(scanf("%d",&l),l) { scanf("%d",&n); a[1] = 0; for(int i = 2; i <= n+1; i++) scanf("%d",&a[i]); a[n+=2] = l; solve(); printf("The minimum cutting is %d.\n",dp[1][n]); } return 0;}
- uva10003 - Cutting Sticks(简单动规)
- UVA10003---Cutting Sticks(简单区间dp)
- UVa10003 - Cutting Sticks
- uva10003 - Cutting Sticks
- UVA10003 - Cutting Sticks
- UVA10003 Cutting Sticks
- uva10003 Cutting Sticks
- UVa10003 cutting sticks
- uva10003 Cutting sticks
- uva10003 Cutting Sticks
- uva10003 Cutting Sticks
- UVa10003 Cutting Sticks
- uva10003 - Cutting Sticks(DP,区间)
- [动态规划]UVA10003 - Cutting Sticks
- uva10003 Cutting Sticks解题报告
- uva10003 - Cutting Sticks(区间dp)
- UVA10003 Cutting Sticks(区间 DP)
- UVA10003 Cutting Sticks(切棍子)
- 函数名与函数指针
- hdu 1003 Max Sum
- SPRING IBATIS 多数据源
- hibernate主键生成策略
- 360手机root权限怎么获取
- uva10003 - Cutting Sticks(简单动规)
- 并查集求连通分量的个数之hdu1213
- NSLayoutConstraint
- 题目4:找出由两个三位数乘积构成的回文。
- 基于3D卷积神经网络的人体行为理解(论文笔记)
- hdoj_2033 人见人爱A+B
- linux上手工创建数据库
- java IO流操作学生信息管理系统
- spring3.0注解(2)