Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 2) Dynamische Planungsmethode

Einführung

Dieses Thema

AtCoder Beginner Contest 129 C - Typical Stairs Difficulty: 795

Hier kommt die dynamische Planungsmethode ins Spiel, die in * Offizielles Editorial * zu finden ist.

ruby.rb


n, m = gets.split.map(&:to_i)
MOD = 1_000_000_007
dp = Array.new(n + 2, 0)
a = []
dp[0] = 1
m.times do |i|
  a[i] = gets.to_i
  dp[a[i]] = -1
end
n.times do |i|
  next if dp[i] == -1
  if dp[i + 1] != -1
    dp[i + 1] += dp[i]
    dp[i + 1] %= MOD
  end
  if dp[i + 2] != -1
    dp[i + 2] += dp[i]
    dp[i + 2] %= MOD
  end
end
puts dp[n]

array.rb


  oks[a]=false;  # =>Anordnung von Bodenbrüchen

  dp[a[i]] = -1  # =>Boden gebrochen-1

Das offizielle Editorial bietet ein Array für defekte Böden, aber im Moment werden wir es in das DP-Array einbetten. Bei dem unten gezeigten Uhrentyp ist der Teil ** - 1 ** der gebrochene Boden. 20200422.png Wenn Sie das Debuggen mit VSCode usw. ausführen, wird das Innere des DP-Arrays in Variablen und Überwachungsausdrücken angezeigt, sodass Sie überprüfen können, wie sich der numerische Wert ändert und wie der fehlerhafte Boden übersprungen wird.

Fib-Version.rb


  if a[i] - a[i - 1] == 1
    puts "0"
    exit
  end

Die dynamische Planungsversion der Quelle enthält nicht den Teil der Fibonacci-Version, der bestimmt, ob der gebrochene Boden durchgehend ist. Nein, aber wenn es eine Reihe von kaputten Böden gibt, wird ** 0 ** ordnungsgemäß zurückgegeben.

Darüber hinaus ist es einfach, auf Änderungen der Bedingungen zu reagieren, z. B. auf drei Schritte.

Die dynamische Planungsmethode ist erstaunlich. Perl

perl.pl


chomp (my ($n, $m) = split / /, <STDIN>);
my $MOD = 1e9 + 7;
my (@a, @dp);
$dp[0] = 1;
for my $i (1..$m) {
  chomp (my $in = <STDIN>);
  $a[$i] = $in;
  $dp[$a[$i]] = -1;
}
for my $i (0..$n - 1) {
  next if $dp[$i] == -1;
  if ($dp[$i + 1] != -1) {
    $dp[$i + 1] += $dp[$i];
    $dp[$i + 1] %= $MOD;
  }
  if ($dp[$i + 2] != -1) {
    $dp[$i + 2] += $dp[$i];
    $dp[$i + 2] %= $MOD;
  }
}
print $dp[$n] + 0, "\n";

java.java


import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.next());
        int m = Integer.parseInt(sc.next());
        int MOD = 1_000_000_007;
        int a[] = new int[m];
        int dp[] = new int[n + 2];
        dp[0] = 1;
        for (int i = 0; i < m; i++) {
            a[i] = Integer.parseInt(sc.next());
            dp[a[i]] = -1;
        }
        sc.close();
        for (int i = 0; i < n; i++) {
            if (dp[i] == -1) {
                continue;
            }
            if (dp[i + 1] != -1) {
                dp[i + 1] += dp[i];
                dp[i + 1] %= MOD;
            }
            if (dp[i + 2] != -1) {
                dp[i + 2] += dp[i];
                dp[i + 2] %= MOD;
            }
        }
        System.out.print(dp[n]);
    }
}

Diesmal ist es eine Ergänzung, also AC </ font> ohne lange Verwendung.

Ruby Perl Java
Codelänge 359 Byte 436 Byte 902 Byte
Ausführungszeit 64 ms 83 ms 347 ms
Erinnerung 3912 KB 12288 KB 44684 KB

Zusammenfassung

  • ABC 129 C wurde schwer gelöst
  • Machen Sie sich mit Ruby vertraut
  • Machen Sie sich mit Perl vertraut
  • Machen Sie sich mit Java vertraut
  • Machen Sie sich mit dynamischer Planung vertraut

Referenzierte Site

Recommended Posts

Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 2) Dynamische Planungsmethode
Lösen mit Ruby, Perl und Java AtCoder ABC 129 C (Teil 1)
Lösen mit Ruby, Perl und Java AtCoder ABC 128 C.
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
AtCoder ABC 136 D Suche nach Breitenpriorität Gelöst in Ruby, Perl und Java
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
AtCoder ABC 111 C Hash-Sortierung In Ruby, Perl und Java gelöst
AtCoder dwango Programmierwettbewerb B zum Lösen in Ruby, Perl und Java B.
Mit Java verschlüsseln und mit C # entschlüsseln
Lösen mit Ruby AtCoder ACL Anfängerwettbewerb C Union Find (DSU)
Lösen mit Ruby AtCoder ABC177 D Union Find
Verknüpfen Sie Java- und C ++ - Code mit SWIG
Lösung des Rucksackproblems mit dynamischer Planung
Lösen Sie ARC104 D Multiset Mean mit Scala, Java, C ++, Ruby, Perl, Elixir
AtCoder Anfängerwettbewerb 169 A, B, C mit Rubin
Ich habe versucht, Ruby mit Ruby (und C) zu implementieren (ich habe mit Builtin gespielt)
Versuchen Sie, Ruby und Java in Dapr zu integrieren
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
atcoder ABC113 C Problem
atcoder ABC115 C Problem
Kotlin Post- und Pre-Inkrement und Operatorüberladung (Vergleich mit C, Java, C ++)
Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen
ABC177 - E in Ruby lösen
Java und Iterator Teil 1 Externe Iterator Edition
Apache Hadoop und Java 9 (Teil 1)
Ruby C Erweiterung und flüchtig
C # und Java überschreiben Story
Lösen mit Ruby AtCoder 1. Algorithmus Praktischer Test Eine Ausnahmebehandlung