[符号化試験C+]RGB距離


今日の質問


https://www.acmicpc.net/problem/1149

RGB距離



もんだいぶんせき

  • は最大入力が1000なので、O(n^2)程度のアルゴリズムで十分です.
  • の前の選択は以下の内容に影響するので、DPを使用するとO(N)上で解凍することができる.これまで、3つの選択肢の中でベストな選択肢がありましたが、今回はその中から最も価値のないものを選べばいいと思います.
  • 私の答え

    #include <iostream>
    using namespace std;
    int n;
    const int MAX = 1000;
    int cost[MAX][3];
    
    // RGB거리
    int solution(){
        int color[MAX][3];
        color[0][0] = cost[0][0];
        color[0][1] = cost[0][1];
        color[0][2] = cost[0][2];
        for(int i=1;i<n;i++){
            color[i][0] = min(color[i-1][1], color[i-1][2]) + cost[i][0];
            color[i][1] = min(color[i-1][0], color[i-1][2]) + cost[i][1];
            color[i][2] = min(color[i-1][0], color[i-1][1]) + cost[i][2];
        }
        
        return min(color[n-1][0],min(color[n-1][1], color[n-1][2]));
    }

    別の答え

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    int n;
    int r,g,b,R,G,B,x,y,z;
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&r,&g,&b);
            if(i==0) {R=r; G=g; B=b; continue;}
            x=min(G,B)+r;
            y=min(R,B)+g;
            z=min(R,G)+b;
            R=x; G=y; B=z;
        }
        int ans=min(R,min(G,B));
        printf("%d",ans);
    }

    学ぶべきところ

  • 白駿は入力を処理したためか、入力と同時に問題に答える.