HDOJ 1160 FatMouse's Speed

来源:互联网 发布:怎么在淘宝网上找货源 编辑:程序博客网 时间:2024/04/28 07:34
/*问题简单描述:输入一组数据,每行两个数,第一个是老鼠的体重,第二个是老鼠的速度,从中找出体重越大,速度越小的序列,这个序列越长越好输出的第一个数是这个序列的个数接着是这些序列中的元素所在的位置解题思路:先按体重排序,就是一个最大下降子序列的问题。*/#include <iostream>using namespace std;struct Node{int weight;int speed;int num;int pre;}a[1002];int cmp(const void *a, const void *b){if( ( (Node *) a) -> weight == ( (Node *) b) -> weight)return ( ( (Node *) b) -> speed - ( (Node *) a) -> speed);return ( (Node *) a) -> weight - ( (Node *) b) -> weight;}int main( ){int i, j, v=1, flag, max;int dp[1005] = {0};while( scanf("%d%d", &a[v].weight, &a[v].speed) != EOF )a[v].num = v++;v--;for(i = 1; i <= v; i++)dp[i] = 1;qsort(a+1, v, sizeof(Node), cmp);   // 这里是单个元素占用空间大小,不能写成 sizeof(a)max = 1;for(i = v; i >= 1; i--){for(j = i + 1; j <= v; j++){if(a[i].weight < a[j].weight && a[i].speed > a[j].speed && dp[i] < (dp[j] + 1) ){dp[i] = dp[j] + 1;a[i].pre = j;if(dp[i] > max){max = dp[i];flag = i;}}}}cout << max << endl;for( i = 1; i <= max; i++){cout << a[flag].num << endl;flag = a[flag].pre;}return 0;}


原创粉丝点击