算法导论钢条切割问题
来源:互联网 发布:淘宝卖家图片详情模板 编辑:程序博客网 时间:2024/04/29 15:34
钢条切割
思路:1、先考虑,钢条总长度为0时,总价值为0;2、考虑,钢条总长度为1时,此时无法切割,总价值为1;3、钢条长为2时,两种情况:不切割,中间切割一次,比较谁大,取大的方案(要用到上面的结果2);...总结:长度为i的钢条,最左端切割的位置为k,那么总价值如下递推式:
dp[i] = max(dp[i−k]+price[k])(i>0,1<= k<=i )
dp[0] = 0(i=0)
#include <iostream>using namespace std;int price[11] = {0,1,5,8,9,10,17,17,20,24,30};int N = 10;int a[11];int solution2(int m){ int dp[11]; int ans = 0;// memset(dp,0, sizeof(dp)); dp[0] = 0; for (int i = 1; i <= m; ++i) { for (int j = 1; j <= i; ++j) {// dp[i] = max(dp[i],price[j]+dp[i-j]); ans = max(ans,price[j]+dp[i-j]); } dp[i] = ans; } return dp[m];}int solution(int i,int j){ int ans = 0; if(i >= j) return 0; else{// ans = price[j-i];//此处为什么要单独拿出来写??? //上面这句是第一次写错了,下面的循环写的是k = i,导致递归会一直在solution(i,j)上无线死循环。然后加了上面的句子处理初始情况,把下面k从i+1开始,其实上面的句子就是k = j时的特例,不需要单独拿出来 for (int k = i+1; k <= j; ++k) { ans = max(ans,price[k-i] + solution(k,j));// return ans; } return ans;//由于之前把这个地方写错了,导致很多错误不能理解 }}//此处是用的长度做递归参数,由此也能引发思考,明显使用长度做参数代码要好写,考虑的东西也更少!int solution1(int n){// int ans = 0; if(a[n] > 0) return a[n]; if(n == 0) return 0; else{// ans = price[n]; for (int k = 1; k <= n; ++k) { a[n] = max(a[n],price[k] + solution1(n-k));// return ans; } return a[n]; }}/* * output:第一种解法:1 5 8 10 13 17 18 22 25 30第二种解法:1 5 8 10 13 17 18 22 25 30第三种解法:1 5 8 10 13 17 18 22 25 30 */int main() { cout << "第一种解法: " << endl; for (int j = 2; j <= 11; ++j) { cout << solution(1,j) << " "; } cout << endl << "第二种解法: " << endl; for (int i = 1; i <= 10; ++i) { memset(a,0, sizeof(a)); cout << solution1(i) << " "; } cout << endl << "第三种解法: " << endl; for (int k = 1; k <= 10; ++k) { cout << solution2(k) << " "; } return 0;}
0 0
- 算法导论钢条切割问题
- 算法导论 钢条切割问题
- 钢条切割--【算法导论】
- 算法导论读书笔记之钢条切割问题
- 算法导论---DP之钢条切割问题
- 算法导论——钢条切割问题
- 《算法导论》动态规划钢条切割问题
- 算法导论之钢条切割
- 算法导论笔记 动态规划 -- 钢条切割问题 思路
- 算法导论 - 动态规划 - 钢条切割
- 算法导论---------动态规划之钢条切割
- 算法导论--动态规划(钢条切割)
- 动态规划-钢条切割《算法导论》
- 算法导论15.1钢条切割 练习总结
- 算法导论 动态规划之钢条切割
- 算法导论之动态规划:钢条切割
- 钢条切割--动态规划--算法导论
- 算法导论-动态规划-钢条切割
- struts2中s:iterator 标签的使用详解
- 博弈总结
- poj1287——Networking(prim)
- jsp:request.getParameterValues()的两种遍历实现
- (关联函数用法)把服务器访问的数据截取掉,然后改写脚本去验证
- 算法导论钢条切割问题
- 不让EditText进入界面后自动获取焦点
- React Component生命周期
- Springmvc + Mybatis + IntelliJ IDEA 环境搭建
- SQL Server 触发器
- HDU1040(Java)
- 将零散文件使用ICSharpCode.SharpZipLib压缩打包后一次性下载
- pycharm快捷键、常用设置、包管理
- 学习日记20160831