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;
}

  

*[topcoder]AstronomicalRecords的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. Oracle12c创建新用户提示公共用户名或角色无效

    今天将备份的数据库还原到一台新的电脑上,首先要创建用户,执行如下语句: create user fxhy identified " default tablespace USERS temp ...

  2. 我踩过的Alwayson的坑!(上集)

    最近被sql server Alwayson高可用组和读写分离,弄得神魂颠倒,身心俱疲.遇到了下面一些问题,提醒自己也给后来人做些记录. EntityFramework支不支持Alwayson? 起因 ...

  3. 将多维数组转换为支持curl提交的一维数组格式

    /** * @desc 多维数组转化为支持curl提交数组 * @author lytian 2013-06-29 */ public function toPost(array $params = ...

  4. 创建image对象

    Image是一个抽象列,BufferedImage是Image的实现. Image和BufferedImage的主要作用就是将一副图片加载到内存中. Java将一副图片加载到内存中的方法是: Stri ...

  5. Mysql主从配置+读写分离

    Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. ...

  6. JAVA调用WebService总结

    一.wximport自动生成代码 wsimport -keep -p com.test.client http://localhost:8080/test/services/TestService?w ...

  7. 实现ios屏幕的横竖屏自适应

    整理总结中... 刷新 可以通过 -setNeedsUpdateConstraints -layoutIfNeeded 两个方法来刷新约束的改变,使UIView重新布局, 和CoreGraphic的- ...

  8. 封装DB类

    封装DB类     一般一个类单独书写在一个Php文件中,为了见名知意,会对文件名有一个规范:类名.class.php 第1步:     创建DB类 第2 步:     属性设计 第3步:     初 ...

  9. 用Python进行语音信号处理

    1.语音信号处理之时域分析-音高追踪及其Python实现 2.语音信号处理之时域分析-音高及其Python实现 参考: 1.NumPy

  10. 【HeadFirst设计模式】11.代理模式

    定义: 为另一个对象提供一个替身或占位符以访问这个对象. 远程代理 虚拟代理 保护代理.动态代理 其它: 远程代理的远程接口必须继承记号接口Remote 远程代理的使用过程中,要注意序列化的问题, 远 ...