[トレーニング] 20191001済南レポートを解きます

(死...)

わずか30ポイント。

かなり正常な最初の二つの質問、数論+半分の答えの最初の質問、私は自分の成功についてはあまり場合は、配列(生と死弱気)、2番目の質問のDPが(実際、私は、つまり、アナログでも大丈夫だと思います再び破裂ハロ)

3番目の質問。さて、タイトルバーを見てください。

最初の感じは確かに暴力、この質問に多くのポイントは、K = 0は完全なバックパックを解くことができるの一部です。(30点)

はい私はこの質問を見ました。

二感じ。おそらく、DP

しかし、ガチョウは、この問題の正解である最短経路、ダイクストラとSPFAを行います。

I?(黒疑問符)

それは先生の説明です

これは、教師のプログラムであり、

<ビット/ STDC ++ H>の#include
 の#define 20001
 の#define N 5001
 使用して 名前空間STD。
typedefの長い 長いLL。
構造体ノード{
     int型のX; LL V;
    ブール 演算子 <(constのノード&OTH)のconst {
         戻り V> oth.v。
    } 
}。
PRIORITY_QUEUE <ノード> Q。
INT [A] VIS、[A]予め、N、M、K。
LL [N]、DIS [A]、合計[N]。
LL getin(){ 
    LL S = 0文字 C =getchar関数();
    一方、(C < ' 0 ' || C> ' 9 ')C = GETCHAR()。
    一方、(C <= ' 9 ' && C> = ' 0 ')S = S * 10ll + C - ' 0 '、C = GETCHAR()。
    リターン秒; 
} 
ボイドダイクストラ(){
     ためint型 iは= 1 ; iは< 1 ]; iは++)DIS [I] = 1E18。
    DIS [ 0 ] = 0 ; 
    Q。00 })。
    一方、(!q.empty()){
         int型、U = q.top()X。
        q.pop(); 
        もし(VIS [U])続けます
        VIS [U] = ;
        int型 I = 1 iが++; iが<= N ){
             int型 [V =(U + [I])%を1 ]。
            もし(DIS [U] + [I] < DIS [V]){ 
                DIS [V] = DIS [U] + [I]。
                事前[V] = I、q.push((ノード){V、DIS [V]})。
            } 
        } 
    } 
} 
int型のmain(){ 
    freopenは(" equip.in "" R " 、STDIN)。
    freopenは(" equip.out "" W " 、STDOUT)。
    scanf関数(" %D%D%D "、&​​N、&M、およびK);
    以下のためにint型 I = 1 [I] = iが++; iが<= N) ()getin します。
    ダイクストラ(); 
    以下のためにint型 I = 1 ; I <= M。= 場合(X <DIS [X%[ 1 ])のprintf(" なしの\ n " );
        他の{ 
            のprintf(" はい" );
            もし(Kの== 1 ){
                 ためのint型 J = 1 ; J <= N; J ++)和[J] = 0 ; 
                和[ 1 ] + =(X - DIS [X%[ 1 ])/ [ 1 ]。
                一方、(X%の[ 1 ]){ 
                    和[プレ[Xの%[ 1 ]]] ++ getin()。
         ;
                    X =((X - [プレ[X%[ 1 ]]])%[ 1 ] + [ 1 ])%[ 1 ]。
                } 
                のためのINT J = 1 ; J <= N; J ++)のprintf(" %I64d " 、和[J])。
            } 
            のprintf(" の\ n " ); 
        } 
    } 
    戻り 0 
}

(私は無能な理解します...)

そう!私が理解しやすい方法をしたいと思います!

Useカラム不定方程式の解法

各機器mについて、カラム式

N 1 X 1 + N 2 ×2 + N 3 X3 + ... + N N XN = M

以下のような課題を解決

(N-1までの時間拡張ユークリッドライン溶液を用いて全体としてそれぞれ)

大きな最短の時間複雑より少し

(プログラムは印象づけるでしょうチューニングするために、書く時間を持つことになります)

おすすめ

転載: www.cnblogs.com/Daz-Os0619/p/11616165.html