QAQへのへのPPT上のコンテンツ
DPは、容易に以下の方法を発生します
- F [x]は、Xジャンプ座標位置上の石の数を表し、段差の最小値を必要とします
- F [X] =分(F [XJ] +石[X])、S <= J <= T
- しかし、X ^ 9 10まで、計算することは困難です
- しかし、100までの石は、これまで離れてから、多くの場合、二つの石、石の時間座標の前にいくつかの連続する点が到達可能である、見つけるのは簡単です。
それを証明するために少し:
場合S!= T、Pの存在は、このようなS <= p <p + 1 <= T明らかGCD(P、P + 1)= 1という
Q> = P×(P-1)、P * X +(P + 1)* yは、Qは、非負整数解でなければならない=すなわち、Qはわずか数p個のステップを歩いて十分に大きい場合ステップのp + 1、そう正確に歩いて行ける距離の長さQ
証明:ときQ = P(P-1)ので、X = P-1、Y = 0; Q 1が増加すると、X - 、++ Y; X 0後に減少、yがこの時間Qに、P-1 = =ようにと、P ^ 2-1、次いでQは、次に、X = P、Y = 0をせ増加し続けます。
そして、それはなぜこれほど多くのQAQの離散的な追加の数かどうかは明らかではありません
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #define MAX(X、Y)(X)>(Y)?(X):( Y) #defineする MIN(X、Y)(X)>(Y)?(y)を:( X) の#define LL長いです長い の#define RGレジスタ のconst int型 N = 200 + 5、M = 1E7 + 5、INF = 0x3f3f3f3f、P = 99999997 。 int型、L、S、T、N、ANS = INF、[N]、D [N]、STO [M]、F [M]。 テンプレート < クラス T> ボイド RD(T&X){ X = 0。INT W = 0。CHAR CH = 0 。 しばらく W | = CH ==(isdigit(CH)!)' - '、CH = getchar関数(); 一方、(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。 X?= W - X:X; } int型のmain(){ // freopenは( "in.txt"、 "R"、STDIN)。 RD(L)、RD(s)は、RD(T)、RD(n)は、 以下のために(int型 i = 1 ; iは= N <; ++ I)RD([I])。 ソート(A + 1、A + N + 1); [ 0 ] = 0、[N + 1 ] = リットル; 以下のために(int型 i = 1 ; iは= N <; ++ I)D [I] =([I] -a [I- 1 ])%3000 。 以下のために(int型 i = 1 ; iは= N <; ++ I)[I] [I-= 1 ] + D [i]は、STOを[I] = 1 。 memsetの(F、INF、はsizeof (F))。 F [ 0 ] = 0、L = [N]。 用(int型 iは= 1 ; iが= L + T <++ {i)が ため(INT J = Sであり; J <= T; ++ j)の 場合(IJ> =0)F [I] = MIN([I]、F [I-F J])。 F [I] + = STO [I]。 } // のための(iはLを= int型、iが= L + T <; ++ i)がprintfの( "%のD"、[I] F)。 以下のために(int型 Iを= Lを、iがL + Tを<; ++ I)ANS = MIN(ANS、F [I])。 printf(" %dの" 、ANS)。 リターン 0 ; }