L'idée et les exemples typiques d'algorithme glouton

1. L'idée d'un algorithme glouton

L’algorithme glouton est un algorithme qui fait toujours le meilleur choix au moment de la résolution d’un problème, sans tenir compte de l’optimalité globale.

2. Stratégie de résolution de problèmes utilisant un algorithme glouton

L'idée de base est de procéder étape par étape à partir d'une solution initiale au problème. Selon une mesure d'optimisation, chaque étape doit garantir qu'une solution locale optimale peut être obtenue. La clé de l’algorithme glouton réside dans la sélection de la stratégie gloutonne, et non dans l’obtention de la solution globale optimale à tous les problèmes. Si les données suivantes et la solution optimale partielle sont connectées ensemble et que ce n'est plus une solution réalisable, les données ne seront pas ajoutées à la solution partielle jusqu'à ce que toutes les données soient énumérées, ou l'algorithme ne peut plus être ajouté et l'algorithme s'arrête. . "

Trois questions typiques 

cinquième dimension

La dimension zéro est un point, et le point se déplace pour former une ligne ;

Une dimension est une ligne et la ligne se déplace pour former une surface ;

Deux dimensions sont des surfaces, et les surfaces se transforment en corps ;

Les trois dimensions sont le corps, et les mouvements du corps forment l’histoire ;

La quatrième dimension est l'histoire, et l'histoire bouge ????

Les humains tentent désormais de comprendre la cinquième dimension.

Et Xiaodu est désormais un sage de la cinquième dimension. Un jour, Xiaodu a découvert que de nombreux scientifiques essayaient de comprendre la cinquième dimension. Les êtres humains sont des créatures à quatre dimensions. S'ils comprennent la cinquième dimension, ils parviendront probablement à la cinquième dimension. C'est évidemment quelque chose que Xiaodu ne veut pas. (Après tout, il y a un problème de population partout...) Xiaodu espère donc qu'ils comprendront la cinquième dimension le plus tard possible. Par conséquent, Xiaodu utilise une perspective de dimension supérieure pour voir tous les scientifiques qui comprennent la cinquième dimension. cinquième dimension chez les humains. , et le QI de ces scientifiques sera différent, donc leur vitesse de compréhension Vi​ sera également différente ; et le moment Si​ auquel ils commencent à comprendre sera également différent. La vitesse de compréhension Vi​ est décrite comme Vi​ unités de compréhension acquises par unité de temps. C'est-à-dire qu'au moment Si​+1, le scientifique contribuera à la compréhension de Vi​ pour la première fois. Nous définissons la cinquième dimension à comprendre lorsque le nombre total de compréhensions dépasse m. Parce que Xiaodu a une dimension supérieure, il peut utiliser le paradoxe temporel pour porter un coup dur aux humains. Xiaodu peut faire disparaître n'importe quel scientifique à tout moment, de sorte que sa compréhension ultérieure ne continuera pas ; et les humains ne se souviendront pas de lui, donc ses contributions précédentes disparaîtra. Les capacités de Xiaodu étant limitées, Xiaodu ne peut utiliser le paradoxe temporaire qu'une seule fois.

Trouvez maintenant le moment le plus précoce où les êtres humains comprennent la cinquième dimension le plus tard possible.

Le point temporel est initialement 00, mais évidemment aucun scientifique ne peut contribuer au temps 00.

Format

Format d'entrée :

La première ligne donne un entier n et un entier m, indiquant qu'il y a n scientifiques qui comprennent la cinquième dimension lorsque le nombre total de compréhensions dépasse m ; la seconde
à n+1 lignes : chaque ligne a deux entiers Si​ et Vi ;
Pour 100 % des données : 1≤n≤10^5, m≤2*10^9 ;
Pour 100 % des données : 00≤Si​≤2*10^9, 0≤Vi​≤10^3.

Format de sortie:

Une ligne contenant un entier T représentant le moment le plus précoce auquel les humains comprennent la cinquième dimension, le plus tard possible.
Si les humains ne peuvent jamais comprendre la cinquième dimension, sortez -1.

 

répondre

 

#include<bits/stdc++.h> 

using namespace std;
long long s[100000],v[100000],n,m;
bool check(int t){
    long long sum=0,maxn=-1;
    for(int i=1;i<=n;i++){
        if(t-s[i]<=0) continue;
        sum+=(t-s[i])*v[i];
        maxn=max(maxn,(t-s[i])*v[i]);
    }
    return sum-maxn>m;
}
int main( )
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>s[i]>>v[i];
    }
    int l=0,r=999999999;
    while(l<r){
        int mid=(l+r)/2;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    if(check(1)) cout<<l;
    else cout<<-1;
    return 0;
}

Résultats du : 

Je suppose que tu aimes

Origine blog.csdn.net/qq_71356343/article/details/132918096
conseillé
Classement