hdu 1160 FatMouse's Speed

这是一道Special Judge的题目,查了一下

定义:一个题目可以接受多种正确答案,即有多组解的时候,题目就必须被Special Judge.
Special Judge程序使用输入数据和一些其他信息来判答你程序的输出,并将判答结果返回.

 

题目刚开始觉得挺简单的,后来做着做着就有可多问题,还是做题少啊。。。

思路比较简单,按重量W排序,之后去求速度V的下降子序列

自己写的比较有条理、看代码注释吧

  题目传送门

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 typedef struct {
 4     int w,s,old;      //old存储排序前的序号,输出的时候用
 5 }mice;
 6 mice m[1001];
 7 int flag[1001];
 8 int pre[1001];
 9 
10 int main()
11 {
12     int n,i=1,j,k,max;
13     mice temp;
14     while(scanf("%d%d",&m[i].w,&m[i].s)==2)
15     {
16         m[i].old = i;
17         i++;
18     }
19     n = i-1;
20     for(i=1;i<=n-1;i++)
21     {
22         k = i;
23         for(j=i+1;j<=n;j++)
24             if(m[k].w>m[j].w) k = j;
25         if(k!=i)
26         {
27             temp = m[k];
28             m[k] = m[i];
29             m[i] = temp;
30         }
31     }
32     for(i=1;i<=n;i++)
33         flag[i] = 1;
34     memset(pre,0,sizeof(pre));
35     for(i=n-1;i>=1;i--)
36         for(j=i+1;j>=1;j--)
37             if(m[i].w>m[j].w&&m[i].s<m[j].s)   //不下降子序列核心
38             {
39                 if(flag[j]<flag[i]+1)
40                 {
41                     flag[j] = flag[i]+1;
42                     pre[j] = i;
43                 }
44             }
45     max = 0;
46     k = 0;
47     for(i=1;i<=n;i++)
48     {
49         if(max<flag[i]) 
50         {
51             max = flag[i];
52             k = i;
53         }
54     }
55     printf("%d\n",max);
56     while(k)
57     {
58         printf("%d\n",m[k].old);   //输出原序号
59         k = pre[k];
60     }
61 
62     return 0;
63 }

 

 

 

 

posted @ 2013-05-11 20:32  飞向梦  阅读(158)  评论(0编辑  收藏  举报