摘要: 题目大意:就是给出一个序列,求最长递增子序列,并打印方案。 1 #include 2 #include 3 #define MAXN 100000 4 5 int a[MAXN], lis[MAXN], pre[MAXN]; 6 7 void print_lis(int p) 8 { 9 if (pre[p] != -1) print_lis(pre[p]);10 printf("%d\n", a[p]);11 }12 13 int main()14 {15 #ifdef LOCAL16 freopen("in", "r", stdi 阅读全文
posted @ 2013-09-08 16:06 xiaobaibuhei 阅读(585) 评论(0) 推荐(0)
摘要: 题目大意:给一个建筑的序列,建筑用高度和宽度描述,找出按高度的LIS和LDS,最长XX子序列的长度按照序列中建筑的宽度和进行计算。 其实就是带权的最长XX子序列问题,原来是按个数计算,每个数权都是1,现在有不同的权重。 1 #include 2 #include 3 using namespace std; 4 #define MAXN 100000 5 6 int h[MAXN], w[MAXN], lis[MAXN], lds[MAXN]; 7 8 int main() 9 {10 #ifdef LOCAL11 freopen("in", "r", 阅读全文
posted @ 2013-09-08 14:56 xiaobaibuhei 阅读(400) 评论(0) 推荐(0)
摘要: 题目大意:给一个车辆到达车站的序列(按时间先后),可以对车辆进行以下处理:插在队首、插在队尾或者拒绝进站。车站内的车辆必须按照重量大小从大到小排列,问车站内最多能有多少辆车辆? 假设车i是第一个进站,那么在i后面的车辆如果比i车重,可以插在i的前面,如果比i车轻,可以插在i的后面。这就变成了求以i为起点的最大递增子序列和最大递减子序列了,i首先进站的最大长度为LIS(i)+LDS(i)-1,找出其中的最大值就可以了。 1 #include 2 #include 3 using namespace std; 4 #define MAXN 2010 5 6 int a[MAXN], l... 阅读全文
posted @ 2013-09-08 14:27 xiaobaibuhei 阅读(433) 评论(0) 推荐(0)
摘要: 题目大意:一种拦截导弹能拦截多枚导弹,但是它在每次拦截后高度不会再升高,给出导弹的序列,问最多能拦截多少枚导弹? 最长递减子序列问题。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 vector m, lds; 7 8 int main() 9 {10 #ifdef LOCAL11 freopen("in", "r", stdin);12 #endif13 int x, kase = 0;14 while (scanf("%d", &x) != EOF 阅读全文
posted @ 2013-09-08 10:55 xiaobaibuhei 阅读(269) 评论(0) 推荐(0)
摘要: 题目大意:给定一种估算Pi的方法:给出一系列随机数,从中任选两个数,这两个数的最大公约数不大于1(互质)的概率为6/(Pi*Pi),然后给出一系列数,据此估算Pi的值。直接模拟就好了。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int gcd(int a, int b) 7 { 8 return b == 0 ? a : gcd(b, a%b); 9 }10 11 int main()12 {13 #ifdef LOCAL14 freopen("in", "r", stdin) 阅读全文
posted @ 2013-09-08 09:15 xiaobaibuhei 阅读(189) 评论(0) 推荐(0)