c++ 动态规划(重构解).
2015-12-15 00:00
288 查看
摘要: 填坑.
#include <iostream> #include <type_traits>
enum:int { MIMVALUE=-999 }; template<unsigned int N, typename T=int> class DynamicPlan{ T (&Price) ; //随着长度的增加对应的总价格. T Earnings ; //记录收益. T OptimalSulation ; //记录最优解对应的第一段钢条的长度. int length;//给定的钢条长度. public: DynamicPlan(T (&thePrice) , const unsigned int& len); ~DynamicPlan(); void BottomToUp(); void print(); };
template<unsigned int N, typename T> DynamicPlan<N, T>::DynamicPlan(T (&thePrice) , const unsigned int& len) :Price(thePrice), length(len) { std::cout<<"the list of price:"; for(int i=0; i<N; ++i){ std::cout<<this->Price[i]<<" "; this->Earnings[i]=0; //获得随着切割次数的增加对应的价格. this->OptimalSulation[i]=0; //最佳解决方案. } std::cout<<std::endl; }
template<unsigned int N, typename T> DynamicPlan<N, T>::~DynamicPlan() { std::cout<<"destroy it"<<std::endl; }
template<unsigned int N, typename T> void DynamicPlan<N,T>::BottomToUp() { this->Earnings[0]=0; for(int j=1; j<length; ++j){ //假设从1英寸处开始切的. int q=MIMVALUE; for(int i=1; i<=j; ++i){ if(q < Price[i]+Earnings[j-i]){ q=Price[i]+Earnings[j-i]; OptimalSulation[j]=i; Earnings[j]=q; } } } }
template<unsigned int N, typename T> void DynamicPlan<N,T>::print() { std::cout<<"print Earnings:"<<std::endl; for(auto out : Earnings){ std::cout<<out<<" "; } std::cout<<std::endl; std::cout<<"print OptimalSulation:"<<std::endl; for(auto print : OptimalSulation){ std::cout<<this->length-print<<" "; } std::cout<<std::endl; }
int main() { int arry[]={1, 5, 8, 9, 10, 17, 17, 20, 24, 30}; DynamicPlan<10> myPlan(arry, 3); myPlan.BottomToUp(); myPlan.print(); return 0; }
相关文章推荐
- c++引入依赖 include (转)
- 黑马程序员--C语言自学笔记---03运算符
- c++ 浅复制与深复制
- C++实现简单的双向链表
- 单链表的操作_二分查找
- 哈夫曼(Huffman)编码问题(C++实现)
- CPP-operator==, <overloading
- c++11 之初
- C++左值和右值
- 小项目集锦博客目录(不断更新,总结)
- C++学习笔记(三)enum
- C++之可变参数的实现简介
- C++中的struct和class的区别
- c++设计模式总结
- c++设计模式总结 好久没写博客了 实在是忙
- C++primer--拷贝控制__构造函数和析构函数的执行时期
- 无法查找或打开 PDB 文件。
- C语言冒泡排序及选择排序优化<代码>
- 实战c++中的string系列--不要使用memset初始化string(一定别这么干)
- 实战c++中的string系列--不要使用memset初始化string(一定别这么干)