hdu1160 FatMouse's Speed(LIS普通法)
2016-02-26 21:19
357 查看
先以重量升序速度降序排序,求速度的LCS,LCS用路径表示,所以不能用二分法。。。今天才想起我不会普通法。。。 = =学习了。
唯一搞不懂的是为何样例不一样也还是能通过?
唯一搞不懂的是为何样例不一样也还是能通过?
#include <stdio.h> #include <string.h> #include <algorithm> #include <vector> using namespace std; const int N = 1005; const int INF = 1000000; int n, dp , pre ; struct MICE { int w, s; int id; }mice ; vector <int> mlen; bool cmp(MICE x, MICE y) { if(x.w == y.w) return x.s > y.s; else return x.w < y.w; } int main() { // freopen("in.txt", "r", stdin); int i, j, k, maxl, idm; n = 0; while(~scanf("%d%d", &mice .w, &mice .s)) { mice .id = n + 1; dp = 1; pre = 0; n ++; } maxl = -1; mlen.clear(); sort(mice, mice + n, cmp); for(i = 1; i < n; i ++) for(j = 0; j < i; j ++) { if(mice[j].w < mice[i].w && mice[j].s > mice[i].s && dp[i] < dp[j] + 1) { dp[i] = dp[j] + 1; pre[i] = j; if(dp[i] > maxl) { maxl = dp[i]; idm = i; //最长子序列下标 } } } int x = dp[idm]; printf("%d\n", dp[idm]); while(idm) { mlen.push_back(idm); idm = pre[idm]; } for(i = x - 1; i >= 0; i --) printf("%d\n", mice[mlen[i]].id); return 0; }
相关文章推荐
- HDU 1568
- HDU1290
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- HDU 5592 ZYB's Premutation 线段树(查找动态区间第K大)
- HDU 5240 Exam (好水的题)
- HDU5237 Base64 大模拟
- HDU 1000
- HDU 1001
- 2015-11-11 hdu新生赛 A题(AC)
- 2015-11-11 hdu新生赛 C题(结束后一发AC)
- 2015-11-11 hdu新生赛 E题(结束后一发AC)
- 2015-11-11 hdu新生赛 F题(结束后一发AC)
- hdu-5385