美文网首页
动态规划cuttingRod

动态规划cuttingRod

作者: waterOnTheMars | 来源:发表于2016-03-15 06:55 被阅读0次

算法导论上的。

naive的algorithm:

#include <iostream>
#include <limits.h>
using namespace std;
int max(int a, int b)
{  return (a>b)?a:b;
}
int cutRod(int price[], int n)
{
  if(n<=0){ return 0;}
  int max_val = INT_MIN;
  for (int i = 0;i<n;i++)
  {
    max_val = max(max_val, price[i] + cutRod(price, n - i - 1));
  }
  return max_val;
}
int main(){
int arr[] = {1,5,8,9,10,17,17,20,24,30};
int size = sizeof(arr)/sizeof(arr[0]);
cout<<"maximum: "<<cutRod(arr,9)<<endl;
return 0;
}

top-down algorithm:

#include <iostream>

#include <limits.h>

using namespace std;

int cut2(int price[],int n, int rem[]);

int max(int a, int b){
  return (a>b)?a:b;
}

int cut1(int price[],int n){
  int rem[n];
   for(int i = 0;i<=n;i++){
    rem[i] = INT_MIN;
   }
   return cut2(price,n,rem);
}

int cut2(int price[],int n, int rem[]){
  int q = INT_MIN;
  if(rem[n]>=0){
    return rem[n];
  }
  if(n == 0){
    q = 0;
  }
  else{
    q = INT_MIN;
    for(int i = 0;i<n;i++){
      q = max(q,price[i]+cut2(price,n - i - 1,rem));
    }
  }
  rem[n] = q;
  return q;
}
int main(){
  int arr[] = {1,5,8,9,10,17,17,20,24,30};
  int result = cut1(arr,9);
  cout<<result<<endl;
  return 0;
}

相关文章

网友评论

      本文标题:动态规划cuttingRod

      本文链接:https://www.haomeiwen.com/subject/nxaflttx.html