zoukankan      html  css  js  c++  java
  • UVa10131

    题不算难,记录路径的时候有点麻烦,需要去判断在相等的时候不用更新,然后搜回去就行了。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 struct ele
     6 {
     7     int w;
     8     int s;
     9     int num;
    10 } el[1050];
    11 int cmp(ele a,ele b)
    12 {
    13     return a.w<b.w;
    14 }
    15 int d[1050][1050],s[1050][1050],way[1050];
    16 int main()
    17 {
    18     int i=0,j;
    19     while(scanf("%d%d",&el[i].w,&el[i].s)!=EOF)
    20     i++;
    21     for(int j=1;j<=i;j++)
    22     el[j-1].num=j;
    23     sort(el,el+i,cmp);
    24     memset(d,0,sizeof(d));
    25     for(int j=0;j<i;j++)
    26     {
    27         for(int k=j+1;k<i;k++)
    28         {
    29             if(el[j].w!=el[k].w&&el[j].s>el[k].s)
    30             d[j+1][k]=max(d[j][j]+1,d[j][k]);
    31             else d[j+1][k]=d[j][k];
    32             if(d[j+1][k]==d[j][k]) s[j+1][k]=s[j][k];
    33             else s[j+1][k]=j;
    34         }
    35 
    36     }
    37         int maxd=0,t;
    38         for(j=1;j<i;j++)
    39         if(d[j][j]>=maxd)
    40         {
    41             maxd=d[j][j];
    42             t=j;
    43         }
    44         if(maxd>0)
    45         {
    46             printf("%d
    ",maxd+1);
    47             way[maxd]=el[t].num;
    48             for(j=maxd-1;j>=0;j--)
    49             {
    50                 way[j]=el[s[t][t]].num;
    51                 t=s[t][t];
    52             }
    53             for(int k=0;k<=maxd;k++)
    54             {
    55                 printf("%d
    ",way[k]);
    56             }
    57         }
    58     return 0;
    59 }
  • 相关阅读:
    2013第51周四开放杂记
    2013第51周三杂记
    2013第51周二eclipse启动优化
    2013 第51周一纠错
    2013第50周日小结
    国内主流开放平台接口了解
    手机加密那点事儿_数值内存加密
    crontab,想说爱你不easy
    SIP基本呼叫
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/Acgsws/p/3200203.html
Copyright © 2011-2022 走看看