[中等] UVa OJ 10003 Cutting Sticks 动态规划
来源:互联网 发布:知乎 注册信贷分析师 编辑:程序博客网 时间:2024/06/06 20:18
题目描述
基本思路:
本题就像是一个逆向的堆石子问题,堆石子是把石子堆起来,而这次是把木棍切开来,但实际上解起来都是一样的。
状态转移方程:d[i][j]=min{d[i][k]+d[k][j]}+a[j]-a[i],i<k<j.其中d[i][j]表示切割第i个切割点到第j个切割点之间的木棍需要的最小花费,a[i]表示第i个切割点的实际长度,k为i与j之间的切割点。
具体代码:
#include <iostream>#include <climits>using namespace std;const int maxn=50+5;int a[maxn];int d[maxn][maxn];int main(){ // freopen("input.txt","r",stdin); int l; for(cin>>l;l!=0;cin>>l) { int n; cin>>n; a[0]=0; for(int i=1;i<=n;++i) { cin>>a[i]; } a[n+1]=l; for(int i=0;i<=n;++i) { for(int j=0;j<=n+1;++j) d[i][j]=INT_MAX; d[i][i+1]=0; } for(int k=2;k<=n+1;++k) { for(int i=0;i<=n+1-k;++i) { for(int j=i+1;j<i+k;++j) { d[i][i+k]=min(d[i][i+k],d[i][j]+d[j][i+k]); } d[i][i+k]+=(a[i+k]-a[i]); } } cout<<"The minimum cutting is "<<d[0][n+1]<<"."<<endl; } return 0;}
阅读全文
0 0
- [中等] UVa OJ 10003 Cutting Sticks 动态规划
- uva 10003 - Cutting Sticks 动态规划
- UVA - 10003 - Cutting Sticks(动态规划)
- UVa OJ 10003 - Cutting Sticks
- 【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)
- uva 10003 Cutting Sticks (动态规划:区间DP)
- uva 10003Cutting sticks(动态规划水题)
- [动态规划]UVA10003 - Cutting Sticks
- UVa 10003 Cutting Sticks
- UVA 10003 - Cutting Sticks
- UVa 10003 - Cutting Sticks
- uva 10003 Cutting Sticks
- uva:10003 - Cutting Sticks
- UVa 10003 Cutting Sticks
- UVa 10003 Cutting Sticks
- UVa 10003 - Cutting Sticks
- UVA 10003 Cutting Sticks
- Uva - 10003 - Cutting Sticks
- 二叉树问题合集
- 括号配对问题
- platform平台device和driver如何匹配
- 预编译的作用和目的
- 简述page指令的各个属性的值
- [中等] UVa OJ 10003 Cutting Sticks 动态规划
- Android animation属性动画
- Selenium with Python中文翻译(四)
- 生物信息学-批量上传文件
- 51nod 1101 换零钱 完全背包计数
- crf 的数数 (树状数组 离线操作)
- AndroidStudio获取SHA1签名笔记
- java自定义排序(Comparable与Comparator)
- Java新特性之二Lambda表达式