[HDU1422] Reviva a Copa do Mundo (programação dinâmica simples)

Reviva a Copa do Mundo

Limite de tempo: 2000/1000 MS (Java / outros) Limite de memória: 65536/32768 K (Java / outros)

Descrição do Problema

A Copa do Mundo acabou, e os italianos até recuperaram a dívida que os franceses tinham com eles há 6 anos, venceram a Copa Hércules e conquistaram a Itália de quatro estrelas.
Embora a Copa do Mundo tenha acabado, esta Copa do Mundo ainda nos deixa com Muitas coisas vale a pena lembrar. Por exemplo, ouvimos o comentário apaixonado de 3 minutos de Huang Mingzui. Aprendemos que podemos mostrar 3 cartões amarelos para a mesma pessoa. Também vimos que a cabeça de Zidane pode não só superar a bola, mas também as pessoas ...… ......
Como há tantas coisas maravilhosas, xhd decidiu revisitar a Copa do Mundo na Alemanha, é claro, apenas para ir às cidades que sediam a Copa do Mundo. Mas isso requer muito dinheiro, felizmente, o amor de xhd pela Copa do Mundo. pelo Comitê Organizador da Copa do Mundo da Alemanha, eles fornecerão ao xhd passagens aéreas de ida e volta para Hangzhou, China e qualquer cidade anfitriã da Copa do Mundo na Alemanha, e persuadiram essas cidades a lhe fornecerem um subsídio de subsistência quando xhd chegar à cidade, para que ele pode usá-lo ao visitar lá., Quando o passeio terminar, o dinheiro restante também será reservado para xhd, mas quando as despesas de vida não forem suficientes, eles vão encerrar à força a viagem xhd para a Alemanha, além disso, eles tem uma condição, xhd só pode visitar de acordo com a rota que eles forneceram. Por exemplo, existem 3 cidades a, b e c, e eles forneceram a rota de abc, então xhd tem apenas 3 ordens de visita abc, bca, cab. Como o custo de vida fornecido por cada cidade e o custo de cada cidade são diferentes, isso faz com que Xhd seja uma dor de cabeça. Felizmente, sabíamos o custo de vida e despesas com antecedência. Quantas cidades o Xhd pode visitar sem problemas?

Entrada

Cada conjunto de dados de entrada é dividido em duas linhas. A primeira linha é um número inteiro positivo n (1 <= n <= 100000), indicando que há n cidades. A próxima linha mostra o custo de vida dessas n cidades de acordo com o dada ordem de rota E o custo, w1, l1, w2, l2, ..., wn, ln, onde wi, li representam o custo de vida e despesas da i-ésima cidade, e são todos inteiros positivos.

Resultado

O número máximo de cidades que podem ser visitadas correspondente a cada conjunto de saída de dados.

Amostra de entrada

3
3 2 3 4 2 2
3
3 2 3 4 2 3

Saída de amostra

3
2

Quando fiz esta pergunta no início, não analisei o significado da pergunta com cuidado, então comecei o TIE. Aprendi mais tarde que é uma coisa semelhante a um loop e basta seguir o método que fizemos antes.

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"

using namespace std;

const int maxn = 2e5+5;

int n;
int w,l;
int dp[maxn];
int sum;

int main(){
    while(~scanf("%d",&n)){
        for( int i=0 ; i<n ; i++ ){
            scanf("%d%d",&w,&l);
            dp[i]=dp[i+n]=w-l;
        }
        sum = 0;
        int k = 0;
        int max = 0;
        for( int i=0 ; i<2*n ; i++ ){
            sum += dp[i];
            k++;
            if(sum < 0){
                sum = 0;
                k = 0;
            }
            if( k > max ) max = k;
            if( k > n ) break;
        }
        if(max > n) max = n;
        cout<<max<<endl;
    }
    return 0;
}

Acho que você gosta

Origin blog.csdn.net/thesprit/article/details/52026937
Recomendado
Clasificación