算法导论 第15章 动态规划:15.1钢条切割
来源:互联网 发布:网络名人周小平 编辑:程序博客网 时间:2024/04/29 05:16
自上到下递归算法:
# include <iostream>using namespace std;int cutrod(int a[],int n){ if(n==0) return 0; int q=-1; for(int i=1;i<=n;i++) { if(a[i]+cutrod(a,n-i)>q) q=a[i]+cutrod(a,n-i); } return q;}int main(){ int a[11]={0,1,5,8,9,10,17,17,20,24,30}; int n; cin>>n; cout<<cutrod(a,n);}
自下到上动态规划并输出切割方案:
# include <iostream>using namespace std;int main(){ int a[11]={0,1,5,8,9,10,17,17,20,24,30}; int b[11];//保存钢条切割最大价值 int c[11]={0,1,2,3,4,5,6,7,8,9,10};//保存切割方案,默认值为不切割 b[0]=0; b[1]=1; for(int i=2;i<=10;i++) { b[i]=a[i]; for(int j=1;j<i;j++) { if(b[j]+b[i-j]>b[i]) { b[i]=b[j]+b[i-j]; c[i]=j;//更新切割方案 } } } for(int i=0;i<=10;i++) { cout<<b[i]<<" "; int j=i; while(j>0) { cout<<c[j]<<" "; j=j-c[j]; } cout<<endl; }}
带备忘的递归算法:
# include <iostream>using namespace std;int cutrod(int a[],int n,int b[]){ if(b[n]>=0) return b[n];//此处检查备忘 int q; if(n==0) q=0; else { q=-1; for(int i=1;i<=n;i++) { if(a[i]+cutrod(a,n-i,b)>q) q=a[i]+cutrod(a,n-i,b); } } b[n]=q;//此处录入备忘 return q;}int main(){ int a[11]={0,1,5,8,9,10,17,17,20,24,30}; int b[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int n; cin>>n; cout<<cutrod(a,n,b);}
1 0
- 算法导论 第15章 动态规划:15.1钢条切割
- 算法导论--第15章 动态规划--钢条切割
- 算法导论 第15章 动态规划之钢条切割
- 算法导论:第15章 动态规划_1钢条切割
- 算法导论-第15章-动态规划-15.1 钢条切割问题
- 算法导论15章 动态规划 之 钢条切割
- 算法导论-第15章-动态规划:钢条切割问题自底向下方法C++实现
- 算法导论:第15章 动态规划_1_2钢条切割_动态规划的两种解法
- 算法导论 - 动态规划 - 钢条切割
- 算法导论---------动态规划之钢条切割
- 算法导论--动态规划(钢条切割)
- 动态规划-钢条切割《算法导论》
- 算法导论 动态规划之钢条切割
- 算法导论之动态规划:钢条切割
- 钢条切割--动态规划--算法导论
- 算法导论-动态规划-钢条切割
- 《算法导论》动态规划钢条切割问题
- 动态规划之钢条切割问题自底向上发的实现(算法导论第15章)
- centos7.0安装Apache+mysql+php
- PostgresQL FDW 源码分析之总结
- PHP购物车代码
- Codeforces Round #360 (Div. 2) -- D. Remainders Game (中国剩余定理)
- Ubuntu下查看软件版本及安装位置
- 算法导论 第15章 动态规划:15.1钢条切割
- CSS布局之【Position】属性
- Java设计模式之单例模式
- Codeforces Round #358 (Div. 2) D dp
- C#桌面办公应用-工资管理系统系列五
- 最短路径算法汇总
- 图算法0之1001
- “欢迎使用CSDN-markdown编辑器”收藏
- 10 篇数据库技术热文