💜[アルゴリズム]1.グレースケールアルゴリズム

9822 ワード

1.概念問題


1.1.だいすうのほうそく


:配列の大きさN,数字を加算した回数M,そしてkの場合,与えられた数をM回加算して最大数を形成する法則.
配列内のインデックスの数は、kを連続的に超えることはできません.
  • 入力条件:
  • [1]N、M、Kの自然数、区切り:スペース
    [2]N個の自然数、区切り:スペース
    map(変換関数、巡回可能データ)

    最大と最小の数字を繰り返し追加するだけで

    n,m,k = map(int,input().split())
    # 배열크기:5, 더해지는 횟수:8, 연속해서 더해질 수 있는 횟수:3
    nlist=list(map(int,input().split()))
    # 2,4,5,4,6
    nlist.sort(reverse=True)
    print(nlist)
    first=nlist[0]
    second=nlist[1]
    result = 0
    5 8 3
    2 4 5 4 6
    [6, 5, 4, 4, 2]
    
    while True:
        for i in range(k):
            if m ==0:
                break
            result += first
            m -= 1
        if m==0:
            break
        result +=second
        m-=1
    
    print(result)
    0

    さらに最適化

  • 繰り返し数列長:(K+1)
  • 回繰り返し:M//(K+1)
  • の出現回数が最も多い:
  • [数列の繰返し数*k]+[Mは(K+1)に分けられない場合]
    Mは(K+1)で区切られていない
    Mを(K+1)で割った最大数.
    M//( K + 1 ) * K + M % (K+1)
    n,m,k = map(int,input().split())
    # 배열크기:5, 더해지는 횟수:8, 연속해서 더해질 수 있는 횟수:3
    nlist=list(map(int,input().split()))
    # 2,4,5,4,6
    nlist.sort(reverse=True)
    print(nlist)
    first=nlist[0]
    second=nlist[1]
    result = 0
    
    count = int(m/(k+1))*k
    count += m %(k+1)
    
    result = 0
    result +=(count)*first
    result +=(m-count)*second
    print(result)
    5 8 3
    2 4 5 4 6
    [6, 5, 4, 4, 2]
    46

    1.2.デジタルカードゲーム


    複数のデジタルカードの中から一番高いカードを1枚選ぶゲーム.
  • N*M:行x列
  • が引きたいカードを含む行を選択します.
  • 選択行の中で最も数字の低いカード
  • を抽出する.
  • 以降、その行で最も低い数字を引いたカードを考慮して、最終的に最も高い数字を引いたカードの戦略を制定する.
  • n, m = map(int,input().split()) #행 열
    
    min_max=list()
    
    result=0
    for i in range(n):
        linecard = list(map(int,input().split()))
        min_x=min(linecard)
        result = max(result,min_x) # 기존의 것과 현재의 것을 비교
    print(result)
    1 4
    4 3
    1 5
    3