• *[topcoder]AstronomicalRecords


    http://community.topcoder.com/stat?c=problem_statement&pm=12804&rd=15706

    首先A和B的长度都不一定一样,里面的元素也不一定有序。比如,A={1,4,6,7,2,8} and B={1,3,5,6,8,2,9,10}。二来,因为A和B都是代表着ratio,那么选定A[i]和B[j],假设他们是同一个,就可以把A和B数组normalize。方法是A*B[j],B*A[i]。此时问题就转化成最长公共子序列了。另外要注意,因为用了乘法,所以元素可能超过int,要用long表示。

    #include <set>
    #include <vector>
    using namespace std;
    
    class AstronomicalRecords {
    public:
        int minimalPlanets(vector <int> A, vector <int> B);
    private:
        int sub(vector<long> A, vector<long> B, int i, int j);
    };
    
    int AstronomicalRecords::sub(vector<long> A, vector<long> B, int x, int y) {
        int p = A[x];
        int q = B[y];
        for (int i = 0; i < A.size(); i++) {
            A[i] *= q;
        }
        for (int i = 0; i < B.size(); i++) {
            B[i] *= p;
        }
        vector<vector<int> > dp(A.size()+1);
    	for (int i = 0; i < dp.size(); i++)
    		dp[i].resize(B.size()+1, 0); // i, j for the length
    	int m = 0;
        for (int i = 0; i <= A.size(); i++) {
            for (int j = 0; j <= B.size(); j++) {
                if (i == 0 || j == 0)
                    dp[i][j] = 0;
                else if (A[i-1] == B[j-1])
                    dp[i][j] = dp[i-1][j-1] + 1;
                else
                    dp[i][j] = dp[i-1][j-1];
    			m = max(dp[i][j], m);
            }
        }
        return m;
    }
    
    int AstronomicalRecords::minimalPlanets(vector <int> _A, vector <int> _B) {
        vector<long> A;
        vector<long> B;
        for (int i = 0; i < _A.size(); i++) {
            A.push_back(_A[i]);
        }
        for (int i = 0; i < _B.size(); i++) {
            B.push_back(_B[i]);
        }
        int max_seq = 0;
        for (int i = 0; i < A.size(); i++) {
            for (int j = 0; j < B.size(); j++) {
                max_seq = max(sub(A, B, i, j), max_seq);
            }
        }
        return A.size() + B.size() - max_seq;
    }
    

      

  • 相关阅读:
    每天一个topic----route 设置
    每周一个topic IGMP -- 2013.08.13
    HTTP API 加签名规则
    gitbook 编辑手册
    phpMyAdmin 配置文档
    扒房源线索消息推送设计
    jetty 必知必会
    回溯法解决八皇后问题
    求m行n列个方格的正方形总数
    IOC和AOP的简单实现
  • 原文地址:https://www.cnblogs.com/lautsie/p/3442375.html
Copyright © 2020-2023  润新知