that_one_nigga_you_k

lista 6

Sep 24th, 2024
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. // Função para calcular a diversão na t-ésima corrida do brinquedo
  6. int calculaDiversaoBrinquedo(int S, int B, int t) {
  7.     return S - (t - 1) * (t - 1) * B;
  8. }
  9.  
  10. // Função para calcular a diversão máxima possível até o maior valor de créditos
  11. void calculaDiversaoMaxima(int S[], int B[], int C[], int N, int K_max, int dp[]) {
  12.     // Para cada brinquedo i
  13.     for (int i = 0; i < N; i++) {
  14.         // Para cada corrida no brinquedo i
  15.         for (int corrida = 1;; corrida++) {
  16.             int diversaoAtual = calculaDiversaoBrinquedo(S[i], B[i], corrida); // Diversão da t-ésima corrida
  17.             int custoAtual = C[i]; // Custo de uma única corrida
  18.  
  19.             // Atualiza a tabela dp de trás para frente (para garantir que cada combinação de corridas seja usada uma vez)
  20.             for (int j = K_max; j >= custoAtual; j--) {
  21.                 dp[j] = max(dp[j], dp[j - custoAtual] + diversaoAtual);
  22.             }
  23.  
  24.              // Se a diversão for menor ou igual a 0 ou o custo ultrapassar os créditos disponíveis, parar
  25.             if (diversaoAtual <= 0 || custoAtual*corrida >= K_max) {
  26.                 diversaoAtual = 0;
  27.                 break;
  28.             }
  29.         }
  30.     }
  31. }
  32.  
  33. int main() {
  34.     int N; // Número de brinquedos
  35.     cin >> N;
  36.    
  37.     int dp[25001] = {0};
  38.    
  39.     int S[1000], B[1000], C[1000]; // Arrays para armazenar diversão, aborrecimento e custo
  40.  
  41.     // Lendo as informações dos brinquedos
  42.     for (int i = 0; i < N; i++) {
  43.         cin >> S[i] >> B[i] >> C[i];
  44.     }
  45.  
  46.     calculaDiversaoMaxima(S, B, C, N, 25001, dp);
  47.  
  48.  
  49.     int V; // Número de visitas ao parque
  50.     cin >> V;
  51.  
  52.     int visitas[100]; // Array para armazenar os créditos de cada visita
  53.     int K_max = 0; // Variável para armazenar o maior valor de créditos entre as visitas
  54.  
  55.     // Lendo os créditos de cada visita e encontrando o maior valor de K
  56.     for (int j = 0; j < V; j++) {
  57.         cin >> visitas[j];
  58.        
  59.     }
  60.    
  61.     for (int j = 0; j < V; j++) {
  62.         cout << j << ": " << dp[visitas[j]] << endl;
  63.     }
  64.  
  65.     return 0;
  66. }
Add Comment
Please, Sign In to add comment