hdu1224

来源:互联网 发布:淘宝哪些零食好吃 编辑:程序博客网 时间:2024/06/05 10:31

题目链接:点击打开链接

题意:

是有n个城市,每个城市有一个魅力值,要你从第一个城市出发,每次只能到比你所在城市标号大的城市,最后到下标为n+1的城市(就是1城市),求缩经过的城市最大魅力值之和。

思路:把每种情况列出来就好了

#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=100+10;const int INF=0x3f3f3f3f;int a[maxn][maxn],d[maxn],m[maxn],out[maxn],n;void print_ans(int i){    if(!i)return ;    print_ans(out[i]);    if(i==n+1)printf("1\n");    else printf("%d->",i);}int main(){    int i,j,T,k,ans=0;    scanf("%d",&T);    while(T--)    {        memset(a,0,sizeof(a));        memset(m,0,sizeof(m));        memset(d,0,sizeof(d));        memset(out,0,sizeof(out));        scanf("%d",&n);        for(i=1;i<=n;i++)            scanf("%d",&m[i]);            m[n+1]=m[1];       scanf("%d",&k);       while(k--)       {           scanf("%d %d",&i,&j);           a[i][j]=1;       }       d[1]=m[1];       for(i=2;i<=n+1;i++)       {           for(j=1;j<i;j++)            if(a[j][i])            {                 if(d[i]<d[j]+m[i])                 {                     d[i]=d[j]+m[i];                     out[i]=j;                 }            }       }printf("CASE %d#\n",++ans);       printf("points : %d\n",d[n+1]);       printf("circuit : ");       print_ans(n+1);       if(T!=0)printf("\n");    }    return 0;}


原创粉丝点击