uva 10003 Cutting Sticks
来源:互联网 发布:淘宝卖家发布宝贝品牌 编辑:程序博客网 时间:2024/06/06 14:31
动态规划的题目,dp[i][j]中i和j分别代表切割点下标的起点和终点,point[k]存储第k个切割点的位置,状态转换方程:
情况1:dp[i][j] = 0; //i+1 == j
情况2:dp[i][j] = min{dp[i][k] + dp[k][j] + (point[j]-point[i]) | k>i&&k<j} //其他情况
由于k是位于i和j之间的,所以注意迭代的顺序i是递减的,j是递增的。好像输入的切割点本来就是递增的,我没有对切割点进行排序也过了,严谨一点的话要先排序。
#include <stdio.h>#defineINF999999999int point[60];int dp[60][60];void func(int len, int n){int i, j, k;int temp;for(i=n; i>=0; i--){for(j=i+1; j<=n+1; j++){if(j == i+1){dp[i][j] = 0;}else{dp[i][j] = INF;for(k=i+1; k<=j-1; k++){temp = dp[i][k] + dp[k][j] + point[j] - point[i];if(dp[i][j] > temp)dp[i][j] = temp;} }}}printf("The minimum cutting is %d.\n", dp[0][n+1]);}int main(void){int len, n, i;//freopen("input.dat", "r", stdin);while(scanf("%d",&len), len){scanf("%d", &n);point[0] = 0;point[n+1] = len;for(i=1; i<=n; i++){scanf("%d", point+i);}func(len, n);}return 0;}
0 0
- 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
- 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
- 第十六讲 GridView数据绑定控件(三)
- 黑马程序员学习日记(4)——文件批量重命名程序:One Click容错算法
- Html学习(一):<DOCTYPE html>
- 移动平台WEB前端开发技巧汇总
- 【玩转微信公众平台之五】 进军开发者模式!冲啊!
- uva 10003 Cutting Sticks
- Linux知识点
- Javascript中遍历数组的几种方式?!
- POJ 1004
- 最长公共子序列java
- C++中new和delete在数组指针和指针数组中的调用
- 九度 OJ 1510 替换空格
- Android网络通信Volley框架源码浅析(一)
- 总结鸟哥关于在线帮助的内容