Advertisement
leanchec

brigadeiros.cpp

Oct 9th, 2024
241
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.  
  4. const int INF=1e8+7;
  5. int dp[310][310][2710];
  6.  
  7. int main(){
  8.     ios_base::sync_with_stdio(0); cin.tie(0);
  9.     int n, k, t;
  10.     cin >> n >> k >> t;
  11.  
  12.  
  13.     for(int i=0; i<=n; i++){
  14.         for(int j=0; j<=k && j<=i+1; j++){
  15.             for(int pos=1; pos<=2700; pos++){
  16.                 dp[i][j][pos]=INF;
  17.             }
  18.         }
  19.     }
  20.  
  21.     vector<int> v(n+1);
  22.     for(int i=1; i<=n; i++)
  23.         cin >> v[i];
  24.  
  25.     vector<int> amigos;
  26.     amigos.push_back(0);
  27.  
  28.     for(int i=1; i<=n; i++){
  29.           int aux;
  30.           cin >> aux;
  31.           if(aux)amigos.push_back(i);
  32.     }
  33.  
  34.     for(int i=1; i<=n; i++){
  35.         for(int j=1; j<=i && j<=k; j++){
  36.             for(int pos=0; pos<=2700; pos++){
  37.                 if(pos>=v[i])dp[i][j][pos]=min(dp[i-1][j][pos], dp[i-1][j-1][pos-v[i]]+abs(i-amigos[j]));
  38.                 else dp[i][j][pos]=dp[i-1][j][pos];
  39.             }
  40.         }
  41.     }
  42.  
  43.     for(int i=2700; i>=0; i--){
  44.         if(dp[n][k][i]==INF)continue;
  45.         if(dp[n][k][i]<=t){
  46.             cout << i << endl;
  47.             break;
  48.         }
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement