that_one_nigga_you_k

caminho pro iudex

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