HDU 1160 FatMouse's Speed
2012-03-01 21:10
211 查看
题目大意是找到一个最多的老鼠序列,使得序列中的老鼠的体重满足递增,相应老鼠的速度满足递减。思路就是先按体重递增进行sort排序,然后按照体重找到最长递减子序列即可,用动态规划做比较简单。状态f[i]表示前i个老鼠中的最长递减子序列长度,状态转移方程为f[i] = max{f[j], mice[j].speed > mice[i].speed} + 1, 最后找出最大的f[i]即可。注意此题还需要输出找到的序列中的老鼠的最原始的标号,因此不仅要在刚开始的时候把每个老鼠的最初的序号记下来,还要在进行状态转移的时候把当前的老鼠的位置标记下来。
AC code:
AC code:
1 #include <iostream> 2 #include <stdlib.h> 3 #include <algorithm> 4 #define MAX 10000 5 using namespace std; 6 7 struct Fat_mouse{ 8 int wei; 9 int speed; 10 int number; 11 }mice[MAX]; 12 13 int num; 14 int f[MAX]; 15 int No[MAX]; 16 int g[MAX];//用来记录找到的最长序列中的老鼠的在排序后序列中的位置 18 bool cmp(Fat_mouse x, Fat_mouse y) 19 { 20 return x.wei < y.wei || (x.wei == y.wei && x.speed < y.speed); 21 } 22 23 int max(int i) 24 { 25 int max = 0; 26 int max_j = 0; 27 for(int j = 0; j < i; j++) 28 if(f[j] > max && mice[i].speed < mice[j].speed) 29 { max = f[j]; 30 max_j = j; 31 } 32 No[i] = max_j; 33 return max; 34 } 35 int main() 36 { 37 int i = 0, max_i; 38 f[0] = 1; 39 int max_f = 0; 40 while(cin >> mice[i].wei >> mice[i].speed) 41 {i++;} 42 num = i; 43 for(i = 0; i < num; i++)//记录每只老鼠的原始次序 mice[i].number = i+1; 45 sort(mice, mice + num, cmp); 46 for(i = 0; i < num; i++) 47 f[i] = max(i) + 1;//状态转移方程 for(i = 0; i < num; i++) 49 if(f[i] > max_f) 50 { 51 max_f = f[i];//找到最长的序列 max_i = i;//记录最长序列中最后一只老鼠的下标 } 54 printf("%d\n", max_f); 55 for(i = max_f - 1; i >= 0; i--) 56 { 57 g[i] = max_i; 58 max_i = No[max_i]; 59 } 60 for(i = 0; i < max_f; i++) 61 printf("%d\n", mice[g[i]].number); 62 return 0; 63 64 }
相关文章推荐
- HDU 1160 FatMouse's Speed
- HDU 1160 FatMouse's Speed(DP)
- FatMouse's Speed(HDU 1160)—— DP记录路径
- hdu1160 FatMouse's Speed--DP&记录路径
- HDU - 1160 FatMouse's Speed
- hdu1160--fatmouse.speed
- HDU_1160_FatMouse's Speed_dp
- HDU 1160 FatMouse's Speed (dp, 最长子序列)
- HDU 1160 FatMouse's Speed(最长递减子序列变形)
- HDU1160(KB12-J DP)
- hdu 1160 FatMouse's Speed(动态规划)
- HDU 1160 FatMouse's Speed
- hdu1160 最大上升子序列问题+输出路径
- hdu 1160 (dp+路径记录)
- DP LIS 记录路径 hdu 1160
- HDU 1160 FatMouse's Speed(递推)
- hdu 1160 dp
- HDU 1160 FatMouse's Speed(DP)
- HDU-1160 FatMouse's Speed
- hdu 1160 FatMouse's Speed(最长递减子序列 (加强版) )