第一版代码 :
#include <iostream> using namespace std; int max(int a,int b) { if(a>=b)return a; else return b; } int cut_rod(int *p,int n) { int q=NULL; if(n==0)return 0; else for(int i=0;i<n;i++) { q=max(q,p[i]+cut_rod(p,n-1-i)); } return q; } int main() { int p[]={1,5,8,9,10,17,17,20,24,30}; int n; cout<<"Please input a int number"<<endl; cin>>n; int r=cut_rod(p,n); cout<<r<<endl; return 0; }
这版代码 因为p[]的原因,只能对1~10求解。
所以对他进行小小的改进
第二版
#include <iostream> using namespace std; #define NIL (-0x7fffffff-1) int max(int a,int b) { if(a>=b) return a; else return b; } int cut_rod(int *p,int n) { if(n==0) return 0; int q=NIL; if(n<=10){ for(int i=0;i<n;i++) { q=max(q,p[i]+cut_rod(p,n-1-i)); } return q; }else if(n>10){ int b=n/10; n=n-b*10; if(n==0) q=0; for(int i=0;i<n;i++) { q=max(q,p[i]+cut_rod(p,n-1-i)); } return q+b*30; } } int main() { int p[]={1,5,8,9,10,17,17,20,24,30}; int n; cout<<"Please input a int number"<<endl; cin>>n; int r=cut_rod(p,n); cout<<r<<endl; return 0; }
以上就是动态规划——钢条切割问题的朴素解法
时间: 2024-10-05 23:14:48