首页 > 代码库 > UVa 10131 - Is Bigger Smarter?
UVa 10131 - Is Bigger Smarter?
题目:有人认为大象的体重和智力有一定的正相关性,现在给你一些数据,找到一个最长的反例序列。
分析:dp,LIS,醉倒上升子序列。对W排序求出S的最大下降子序列即可,存储路径前驱,dfs输出。
说明:先读到EOF再处理。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; typedef struct enode { int id,w,s; }elephant; elephant E[1001]; int cmp(elephant a, elephant b) { if (a.w == b.w) { if (a.s == b.s) return a.id < b.id; else return a.s > b.s; }else return a.w < b.w; } int F[1001],P[1001]; void output(int s,int d) { if (P[s] == s) { printf("%d\n%d\n",d,E[s].id); return; }else { output(P[s], d+1); printf("%d\n",E[s].id); } } int main() { int count = 0; while (~scanf("%d%d",&E[count].w,&E[count].s)) { E[count].id = count+1; count ++; } sort(E, E+count, cmp); int spa = 0; for (int i = 0 ; i < count ; ++ i) { F[i] = 1; P[i] = i; for (int j = 0 ; j < i ; ++ j) if (E[i].w > E[j].w && E[i].s < E[j].s && F[i] < F[j]+1) { F[i] = F[j]+1; P[i] = j; } if (F[spa] < F[i]) spa = i; } output(spa, 1); return 0; }
UVa 10131 - Is Bigger Smarter?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。