YEZAELP

SMMR-156: OpTree

Jun 8th, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF=1e9;
  4. using pii = pair<int,double>;
  5. double qs[1010];
  6. pii ar[1010];
  7. int n;
  8. double dp[1010][1010];
  9. bool compare(pii a,pii b){
  10.     return a.first < b.first;
  11. }
  12. int main(){
  13.  
  14.     scanf("%d",&n);
  15.     for(int i=1;i<=n;i++)
  16.         scanf("%d",&ar[i].first);
  17.     for(int i=1;i<=n;i++){
  18.         scanf("%lf",&ar[i].second);
  19.         dp[n+1][i]=0.0;
  20.         dp[i][0]=0.0;
  21.         for(int j=1;j<=n;j++) {
  22.             dp[i][j]=(double)INF;
  23.             if(i>j) dp[i][j]=0.0;
  24.         }
  25.     }
  26.     sort(ar+1,ar+n+1,compare);//sort ar[1] to ar[n]
  27.     for(int i=1;i<=n;i++)
  28.         qs[i]=qs[i-1]+ar[i].second;
  29.  
  30.     for(int i=n;i>=1;i--){
  31.         for(int j=1;j<=n;j++){
  32.             if(i==j){
  33.                 dp[i][j]=ar[i].second;
  34.                 continue;
  35.             }
  36.             double sub=qs[j]-qs[i-1];
  37.             for(int k=i;k<=j;k++){
  38.                 dp[i][j] = min(dp[i][j],(double)(dp[i][k-1]+dp[k+1][j]));
  39.             }
  40.             dp[i][j]+=sub;
  41.         }
  42.     }
  43.  
  44.     printf("%.4f",dp[1][n]);
  45.  
  46.  
  47.     return 0;
  48. }
  49. /*
  50. 3
  51. 10 12 20
  52. 34 8 50
  53. */
Add Comment
Please, Sign In to add comment