Advertisement
lelouche29

Pots_and_crow_Samsung

Sep 13th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int n,z;
  5. int a[1000];
  6. int dp[1000][1000];
  7. int ans;
  8.  
  9. void sort(){
  10.    
  11.     for(int i = 1; i<=n; i++){
  12.         for(int j = i+1; j<=n; j++){
  13.             if(a[i] > a[j])
  14.             swap(a[i],a[j]);
  15.         }
  16.     }
  17. }
  18.  
  19. int solve(){
  20.     //overflowing only ith pot at last
  21.     for(int i=1; i<=n; i++)
  22.         dp[i][1]=a[i]*(n-i+1);
  23.  
  24.     for(int i=n; i>0; i--)
  25.         for(int j=2; j<=z; j++)
  26.             for(int k=i+1; k<=n; k++)
  27.                 dp[i][j] = min(dp[i][j], dp[k][j-1]) + (k-i)*a[i];
  28.  
  29.     for(int i=1; i<=n; i++){
  30.         ans=min(ans,dp[i][z]);
  31.     }
  32.     return ans;
  33. }
  34. int main() {
  35.     int t;
  36.     cin>>t;
  37.     while(t--){
  38.         cin>>n>>z;
  39.  
  40.         for(int i=1; i<=n; i++)
  41.             cin>>a[i];
  42.         sort();
  43.  
  44.         for(int i=0; i<1000; i++){
  45.             for(int j=0; j<1000; j++){
  46.                 dp[i][j]=100000000;
  47.             }
  48.         }
  49.         ans=9999999;
  50.         cout<<solve()<<endl;
  51.     }
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement