您的位置:首页 > 其它

DP:钢条切割问题

2017-10-17 14:52 197 查看
某公司出售一段长度为i英寸的钢条价格为pi(i=1,2,...)。钢条长度为整英寸。价格表如程序段变量p给出。现在给定一段长度为n英寸钢条和价格表p,求切割方案,使得销售
收益r最大,注意如果长度为n英寸的钢条价格p足够大时,就不需要切割。
#include<iostream>#include<vector>using namespace std;vector<int>p{0,1,5,8,9,10,17,17,20,24,30};	//钢条价格表int memoized_cut_rod_aux(const vector<int>&p,int n,vector<int>&r){if(r>=0)return r;int q=0;if(n==0)q=0;else {q=-1;for(int i=1;i<=n;++i){q=max(q,p[i]+memoized_cut_rod_aux(p,n-i,r));}}r=q;return q;}int memoized_cut_rod(const vector<int>&p,int n){vector<int>r(n+1,-1);return memoized_cut_rod_aux(p,n,r);}int bottom_up_rod(const vector<int>&p,int n){vector<int>r(n+1,-1);r[0]=0;for(int j=1;j<=n;++j){int q=-1;for(int i=1;i<=j;++i){q=max(q,p[i]+r[j-i]);}r[j]=q;}return r;}int main(){cout<<memoized_cut_rod(p,6)<<endl;cout<<bottom_up_rod(p,6)<<endl;return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: