hdu 1224 Free DIY Tour--最长升子序列
2011-08-02 08:48
253 查看
/* 最长上升子序列问题,或者说比那还简单,城市是按编号从小到大输入的 找到从1开始可以飞到n+1的航线,途中经过的城市的兴趣值最高 注意:只可以从1开始,到n+1,还要记录路径 */ #include<stdio.h> #include<string.h> int a[110],b[110],c[110],d[110][110]; int num=0,n,m; int main() { int t,i,j,x,y; scanf("%d",&t); while(t--) { num++; memset(d,0,sizeof(d)); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); a[n+1]=0; scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); d[x][y]=1; } b[1]=0; c[1]=1; for(i=2;i<=(n+1);i++) { int max=-1,ii; for(j=1;j<i;j++) if(d[j][i]&&b[j]!=-1) { if(b[j]>max) { max=b[j]; ii=j; } } if(ii==-1) { b[j]=-1; } else { c[i]=ii; b[i]=max+a[i]; } } int max=b[n+1],ii; ii=c[n+1]; j=0; while(1) { a[j++]=ii; if(ii==1) break; ii=c[ii]; } j--; if(num!=1) printf("\n"); printf("CASE %d#\n",num); printf("points : %d\n",max); printf("circuit : "); while(j>=0) { printf("%d->",a[j]); j--; } printf("1\n"); } return 0; }
相关文章推荐
- HDU-1224 Free DIY Tour 最长上升子序列
- hdu 1224 Free DIY Tour(最长的公路/dp)
- hdu 1224 Free DIY Tour (DAG 最长路)
- HDU 1224 Free DIY Tour
- HDU1224 Free DIY Tour
- HDU1224 Free DIY Tour(最短路变形,最长路打印路径,spfa)
- hdu 1224 Free DIY Tour
- HDU 1224 Free DIY Tour(简单dp?+记录路径)
- HDU 1224 Free DIY Tour(DP求最短路)
- HDU - 1224 Free DIY Tour 【DAG求最长路】
- hdu 1224 Free DIY Tour(DP多阶段决策)
- hdu 1224【Free DIY Tour】
- HDU1224-Free DIY Tour(SPFA+路径还原)
- hdu 1224 Free DIY Tour(最长路/dp)
- hdu 1224 Free DIY Tour(DP多阶段决策)
- hdu 1224 Free DIY Tour(动态规划)
- hdu 1224 Free DIY Tour(路径输出)
- hdu1224 Free DIY Tour 动态规划
- HDU1224 Free DIY Tour
- hdu 1224 Free DIY Tour(dp)