HDU-1160 FatMouse's Speed

来源:互联网 发布:上位机串口控制单片机 编辑:程序博客网 时间:2024/05/14 06:43
//状态方程  m[i].dp = max{ m[j].dp }  0<=j<i && m[j].w<m[i].w &&m[j].s>m[i].s#include<stdio.h>#include<stdlib.h>#define SIZE 1000+5typedef struct mice{double s,w;int num;//原来的位置int dp;int pre;//记录前一个老鼠的位置}Mice;int cmp(const void *a ,const void *b){ if(((*(Mice *)b).s - (*(Mice *)a).s)!=0)//先按速度从大到小排序return (*(Mice *)b).s - (*(Mice *)a).s; else return (*(Mice *)a).w - (*(Mice *)b).w;//速度相等则按重量从小到大排序}Mice m[SIZE];void Print(int n){if(m[n].pre==n)//若当前位置和前一个老师位置相等,则递归结束{printf("%d\n",m[n].num);return;}Print(m[n].pre);printf("%d\n",m[n].num);}int main(){int n,i=0,j,max=0,end=0,max2;while(scanf("%lf%lf",&m[i].w,&m[i].s)!=EOF){m[i].num = i+1;i++;}n = i;qsort(m,n,sizeof(Mice),cmp); //for(i=0;i<n;i++) //printf("%.0f,%.0f\n",m[i].w,m[i].s);m[0].dp = 1;m[0].pre = 0;for(i=1;i<n;i++){m[i].dp = 1;max2 = 0;m[i].pre = i;for(j=i-1;j>=0;j--)if(m[j].w<m[i].w &&m[j].s>m[i].s && max2 < m[j].dp)//找出符合条件并且max{m[j].dp} 0=<j<i{max2 = m[j].dp;m[i].pre = j;//设置第 i个老鼠的前一个老鼠位置}m[i].dp = max2 + 1;if(m[i].dp>max){max = m[i].dp;end = i;//记录最后一个老鼠的位置}}printf("%d\n",max);Print(end);return 0;}

原创粉丝点击