zoukankan      html  css  js  c++  java
  • 1114D . Flood Fill

    这道题还可以转化成最长回文串,实际的答案是 离散化后的数组最长回文串切成一半有几个数字,这些数字就是中间的数字需要对齐的对象,所以不用改变

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxN = 5008;
    
    int n;
    int dp[maxN][maxN];
    vector<int> a(1), b;
    vector<int> ans;
    
    void input() {
        cin >> n;
        for (int i = 0; i < n; i++) {
            int x; cin >> x;
            if (x != a.back()) a.push_back(x);
        }
        n = a.size() - 1;
    
        b = a;
        reverse(b.begin() + 1, b.end());
    }
    
    void solve() {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (a[i] == b[j]) {dp[i][j] = dp[i-1][j-1] + 1;}
                else {dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}
            }
        }
    }
    
    void output() {
        cout << n - (dp[n][n] + 1)/2 << '
    ';
    }
    
    int main() {
        
        input();
        solve();
        output();
        
        return 0;
    }
  • 相关阅读:
    2017年6月笔记
    2017年5月笔记
    2017年4月笔记
    转发:i p _ f o r w a r d函数
    IP分组
    IP协议首部结构介绍
    IP:网际协议
    sed工具使用
    正则表达式匹配
    TCP的半连接
  • 原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10362537.html
Copyright © 2011-2022 走看看