钢条切割
这道题只是我刚开始学习线性规划的自己的根据大致做法自己写的代码。作为笔记记录一下,未必是简便的程序。
#include <iostream>
using namespace std;
void Print(int x[],int n){
int t;
if(x[2*n]==0) cout<<n<<" ";
else{
t=x[2*n-1];
Print(x,t);
t=x[2*n];
Print(x,t);
}
}
int main()
{
int p[11]={0,1,5,8,9,10,17,17,20,24,30};
int n,max=0;
int r[1001]={-1};
int x[2002]={0};
cin>>n;
for(int i=1;i<=n;i++){
max=p[i];
for(int j=1;j<i;j++){
if(max < (r[j]+r[i-j])){
max=r[j]+r[i-j];
x[2*i-1]=j;
x[2*i]=i-j;
}
}
r[i]=max;
}
cout<<r[n]<<endl;
Print(x,n);
return 0;
}