ann8497

crow/pots Samsung

Aug 21st, 2019
1,103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. // WORKING GOOD ON codechef
  2.  
  3. #include<iostream>
  4. using namespace std;
  5. #define int uint64_t
  6. int n,z;
  7. int a[1009];
  8. int dp[1009][1009];
  9. int ans;
  10.  
  11. void swap(int &x, int &y){
  12.     int temp = x;
  13.     x = y;
  14.     y = temp;
  15. }
  16.  
  17. void sort(){
  18.    
  19.     for(int i = 1; i<=n; i++){
  20.         for(int j = i+1; j<=n; j++){
  21.             if(a[i] > a[j])
  22.             swap(a[i],a[j]);
  23.         }
  24.     }
  25. }
  26.  
  27. int solve(){
  28.    
  29.     for(int i = 1; i<=n; i++)
  30.     dp[i][1] = a[i]*(n-i+1);
  31.    
  32.    
  33.     for(int i = n; i>0; i--)
  34.         for(int j = 2; j<=z; j++)
  35.             for(int k = i+1; k<=n; k++)
  36.             dp[i][j] = min(dp[i][j] , dp[k][j-1] + (k-i)*a[i]);
  37.        
  38.    
  39.     for(int i = 1; i<=n; i++)
  40.     ans = min(ans,dp[i][z]);
  41.    
  42.     return ans;
  43. }
  44.  
  45. int32_t main(){
  46.    
  47.     int t; cin>>t;
  48.     while(t--){
  49.     cin>>n>>z;
  50.    
  51.     for(int i =1; i<=n; i++)cin>>a[i];
  52.    
  53.     sort();
  54.    
  55.     for(int i = 0; i<100; i++)
  56.         for(int j =0; j<100; j++)
  57.             dp[i][j] = 10000000;
  58.        
  59.     ans = 1000000;
  60.     cout<<solve()<<endl;
  61.     }
  62.     return 0;
  63. }
Add Comment
Please, Sign In to add comment