zoukankan      html  css  js  c++  java
  • 【Codeforces 1114D】Flood Fill

    【链接】 我是链接,点我呀:)
    【题意】

    你选择一个point作为start_position 然后每次你可以将包含该start_position的所有联通块变成任意颜色 问你最少要多少次变换才能将所有的方块变成相同颜色.

    【题解】

    设dp[i][j][0]表示将i..j这个区间的所有方块变成a[i]所需的次数 设dp[i][j][1]表示将i..j这个区间的所有方块变成a[j]所需的次数 从小到大枚举区间长度。 然后做一个区间dp就好了 注意dp[i][j][0]不能由dp[i][j-1][0]或者是dp[i][j-1][1]转移过来 因为dp[i][j-1][0]或是dp[i][j-1][1]会先到达dp[i][j][1]这个状态不能直接到达dp[i][j][0]这个状态 (可能和dp[i][j][0]表示的状态一样,但是还需要经过一次转移才能到,所以不能从其直接转移过去) 只能由dp[i+1][j][0]或者是dp[i+1][j][1]直接转移过来 (不能理解的话再去看看题意>_<)

    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 5000;
    
    int a[N+10],c[N+10],n;
    int dp[N+10][N+10][2];
    
    int cmp(int x,int y){
        if (x!=y)
            return 1;
        else
            return 0;
    }
    
    int main(){
        scanf("%d",&n);
        for (int i = 1;i <= n;i++) scanf("%d",&c[i]);
        int nn = 0;
        for (int i = 1;i <= n;i++) {
            int j = i;
            while (j+1<=n && c[j+1]==c[i]) j++;
            a[++nn] = c[i];
            i = j;
        }
        n = nn;
        for (int i = 1;i <= n;i++)
    			for (int j = 1;j <= n;j++)
    				for (int k = 0;k <= 1;k++)
    						dp[i][j][k] = 6000;
        for (int i = 1;i <= n;i++) {
            dp[i][i][0] = 0;
            dp[i][i][1] = 0;
        }
        for (int l = 2;l <= n;l++)
            for (int i = 1;i <= n;i++) {
                int j = i+l-1;
                if (j>n) break;
                dp[i][j][0] = min(dp[i][j][0], dp[i+1][j][0] + 1);
                dp[i][j][0] = min(dp[i][j][0], dp[i+1][j][1] + cmp(a[i],a[j]));
    
                dp[i][j][1] = min(dp[i][j][1], dp[i][j-1][0] + cmp(a[i],a[j]));
                dp[i][j][1] = min(dp[i][j][1], dp[i][j-1][1] + 1);
            }
        printf("%d
    ",min(dp[1][n][0],dp[1][n][1]));
        return 0;
    }
    
  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10361339.html
Copyright © 2011-2022 走看看