Advertisement
SuitNdtie

OpTree

May 20th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4.  
  5. struct node{
  6.     double freq;
  7.     int num;
  8. };
  9.  
  10. bool mycmp(node a,node b){
  11.     return a.num < b.num;
  12. }
  13.  
  14. node arr[1010];
  15. double qs[1010];
  16.  
  17. double sum(int i,int j){
  18.     return qs[j] - qs[i-1];
  19. }
  20.  
  21. double dp[1010][1010];
  22.  
  23. double cal(int i,int j){
  24.     if(j < i)return 0;
  25.     if(j == i)return arr[i].freq;
  26.    
  27.     if(dp[i][j] != -1)return dp[i][j];
  28.     double fsum = sum(i,j);
  29.    
  30.     double min = 1e9;
  31.    
  32.     for(int r = i ; r <= j ; r ++){
  33.         double cost = cal(i,r-1) + cal(r+1,j);
  34.         if(cost < min)min = cost;
  35.     }
  36.     return dp[i][j] = min + fsum;
  37. }
  38.  
  39. int main(){
  40.     for(int i = 0 ; i < 1010 ; i ++)for(int j = 0 ; j < 1010 ; j ++)dp[i][j] = -1;
  41.     int n;
  42.     scanf("%d",&n);
  43.     for(int i = 1 ; i <= n ; i ++){
  44.         scanf("%d",&arr[i].num);
  45.     }
  46.     for(int i = 1 ; i <= n ; i ++){
  47.         scanf("%lf",&arr[i].freq);
  48.     }
  49.     sort(arr+1,arr+n+1,mycmp);
  50.     for(int i = 1 ; i <= n ; i ++){
  51.         qs[i] = qs[i-1] + arr[i].freq; 
  52.     }
  53.     printf("%.4lf",cal(1,n));
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement