Finden Drittel Vorlagen und Beispiele

Um rund zwei Drittel Punkte zu beheben, bestimmt die Höhe der beiden Punkte, dann gibt ein Drittel der Entfernung, Extrempunkte der konvexen Funktion zu finden.

  • Falls  lmid und  rmid die gleiche Seite des maximalen (minimalen) Wertes: dann wird, da Monotonie müssen beide größer (kleiner) Wert, am besten in der Nähe sein, Fernpunktintervall entspricht , um die nicht den Wert enthält, es kann verworfen werden.
  • Wenn beide Seiten: Da die meisten Werte in der Mitte des beide, wir eine Reihe auf beiden Seiten geben, wird es nicht die meisten Werte beeinflussen, kann sie verworfen werden.

Beispiel 1: P3382 [template] Trichotomie

Bedeutung der Fragen: ein Drittel Vorlage Fragen, die n-te Extrempunkte in [l, r] Funktion, auf fünf Dezimalstellen finden, um sicherzustellen, dass es eine Antwort ist.

(Diese Frage ist eine sehr interessante Lösung für ein Problem, was zum Teufel ist out, offensichtlich Drei-Punkt-Vorlage, aber warum gibt es eine Menge von großen Brüdern in dem Spaß, PSO, Ableitung + Hälfte, Simulated Annealing Algorithmus, goldene Schnitt Methode, Gradientenabfallsaktualisierung oder vier zu verbinden Grading, so dass Tränen unwissend)

#include <stdio.h> 
#include <iostream> 
#include <algorithm> 
#include <cstring> 
#include <math.h> 
#include < String > 
#include <map> 
#include <queue> 
#include <Stapel> 
# umfassen < set > 
#include <ctime>
 #define ll long long
 #define inf 0x3f3f3f3f
 const  double pi = 3,1415926 ;
mit  Namespace std; 

verdoppeln a [ 15 ];
Doppel L, R; 

Doppel cal ( double x) { /// 计算n次函数在x点的值
    Doppel res = 0 ;
    für ( int i = n; i> = 0 ; i-- ) 
        res + = a [i] * pow (x, i);
    Rückkehr res; 
} 

Int main () 
{ 
    scanf ( " % d% lf lf% " , & n, l, u r);
    für ( int i = n; i> = 0 ; i-- ) 
        scanf ( " % lf " , & a [i]);
    Doppel EPS = 0.0000001 ; /// verringern die Fehler 
    die während (FABS (rl ist)> = EPS) {
         double m = (rl ist ein) / 3. ; /// dritte Abstand 
        Doppel LM = L + m; /// linke Drittel Punkt 
        Doppel RM = RM; /// das rechte dritte Punkt 
        IF (CAL (LM) < CAL (RM)) 
            L = LM,
         die sonst 
            R & lt = RM; 
    } 
    die printf ( " % .5f \ n- " , L);
     return  0 ; 
}

Außerdem weiß ich nicht, warum alle Überstunden Java-Code, den Code genau die gleiche Art und Weise zu kopieren, bitte beraten.

Import java.util . * ; 

public  class Haupt { 
    
    static  double [] a = neue  Doppel [15 ];
    static  int n;
    statische  Doppel eps = 0.0000001 ;
    public  static  Leere main (String [] args) { 
        Scanner Scan = neue Scanner (System.in); 
        n = scan.nextInt ();
        Doppel L = scan.nextDouble ();
        Doppel r = scan.nextDouble ();
        für ( inti = n; i> = 0; i-- ) 
            a [i] = scan.nextDouble ();
        Doppel ans = 0 ;
        während (Math.abs (rl)> EPS) {
             double m = (rl) / 3 ;
            Doppel lm = l + m ;;
            verdoppeln rm = rm ;;
            wenn (cal (lm) <= cal (rm)) 
                L = LM;
            sonst  
                r = rm; 
        } 
        System.out.printf ( "% .5f \ n" , l); 
    } 
    
    Public  static  Doppelcal ( double x) {
         double res = 0 ;
        für ( int i = n; i> = 0; i-- ) 
            res + = a [i] * Math.pow (x, i);
        Rückkehr res; 
    } 
}
T Metaphysik

 

Beispiel 2: Cattle-off Trainingsspiel 59C Synthese Ausrüstung

Die Bedeutung der Probleme: es ist ein Stück Material, x und Material y Element b, 2 ein Stück Material und das Material (b) 3 kann mit einem A, 4 mit einem Stück Stoff und einem Material (b) kann ein Teil der Ausrüstung B ausgestattet sein, die meisten tun wollen wie viel Ausrüstung. 1 <= a, b <= 1e9

Denken: Angenommen , ein Element , das aus Geräten A, B ausgestattet min ((x-2a) / 4, y-3a), die Antwort am = a + min ((x -2a) / 4, y-3a). Bigwigs sagte: leicht zu sehen , ist eine konvexe Funktion, dann sucht drei Punkte.

Nach dem Match Frage, Problem dritte Erklärung ist, dass ein Drittel, so können große Bruder Spieltisch der dritte gesehen werden, könnte die Frage viel Erfahrung davon haben getan werden, kommt der Code-Tabelle Funktion spielen können wie große Brüder der gleiche Test.

Pit entdeckt durch Zufall: ein Drittel der dritte, ein Anfänger wie mich gesetzten Bedingungen möchte während Satz von rechts <= 3, nur 3 zusätzlich sein kann, die Zufriedenheit aller . Aber für eine ganze Zahl, Problems Rundung berücksichtigt werden, wenn diese Bedingung zur Verfügung gestellt wird , während, wenn der Richter ein Gleichheitszeichen gegeben und ein Gleichheitszeichen nicht zu dem gleichen Ergebnis führen, den Code ändern kann , um zu überprüfen, detaillierter Blick auf dem Code. Um die Genauigkeit, die endgültigen aus dem l und r die besten etwas Intervall war etwas größer, geht Extremwert zu durchqueren, stetig!

Import - Klassen in java.util . * ; 

Public  class Haupt { // Kuh-off Übung 59C 
    statisches  int der X-, Y-,
     öffentliche  statische  Leere main (String [] args) {     
        Scanner Scan = new new Scanner (System.in);
         / * Bonzen er sagte , spielt Tisch, so etwas wirklich ist 
        dabiao (300, 300); 
        dabiao (60, 10); 
        * / 
        int T = scan.nextInt ();
         der während (T = 0! ) { 
            T - ; 
            X = Scan .nextInt (); 
            Y =scan.nextInt ();
             int L = 0 ist , R & lt Math.min = (X / 2, Y / 3 ),
             die während (rl ist eine> = 9.) { // diese Differenz nicht 3 verwenden, mit einem etwas größeren Abschnitt 
                int m = (rl ist ein) / 3. ;
                 int LM = L + m;
                 int RM = RM ;
                 // System.out.printf ( „% D = CAL LM (LM) =% D% RM = D CAL (RM) % D = \ n-“, LM, CAL (LM), RM, CAL (RM)); 
                IF (CAL (LM) <CAL (RM)) // die während Satz rl> = 3 nach dem Gleichheitszeichen zuzüglich ohne der vierte Satz von Daten als falsch. 
                    = L LM,
                 die sonst  
                    R & lt = RM; 
            } 
            //System.out.printf ( "DR L% = D =% \ n-", L, R & lt); 
            int ANS = 0 ;
             für ( int I = L; I <= R & lt; i ++) // nur über einem Verriegelungsabschnitt , kann nicht den besten Wert finden, das Intervall nicht mehr als etwa 3, dann Traverse bei 
                aM = Math.max (aM, CAL (I)); 
            System.out.println (aM); 
        } 
    } 
    public  static  int CAL ( int A) {
         int RES Math.min = a + ((X-2 * a) / 4 ist , Y * 3-.. a);
         return RES; 
    } 
    
    public  static  Leere dabiao ( int X, int Y) { // big Brother Tisch gesagt spielen
        // von 0 A den gesamten Ausrüstung machen das Gerät A machen 
        System.out.printf ( "Spieltisch Dy =% =% X D \ n-" , X, Y);
         für ( int i = 0; I <Math.min (X / 2, Y / 3.); I ++ ) {
             int B Math.min = ((2 * X-I) / 4 ist , Y * 3-.. I); 
            System.out.printf ( „DB% =% A = % D = SUM D \ n-“, I, B, I + B); 
        } 
        System.out.println (); 
        
    } 
    
}

 

Ich denke du magst

Origin www.cnblogs.com/shoulinniao/p/12504280.html
Empfohlen
Rangfolge