HDU 1224(dp46)

来源:互联网 发布:淘宝售前客服工资算法 编辑:程序博客网 时间:2024/05/20 15:31
#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>using namespace std;int spot[105];bool plane[105][105];int dp[105];int pre[105];void show(int a){    if (a == 1)    {        printf("1");        return;    }    show(pre[a]);    printf("->%d", a);}int main(){    int T;    scanf("%d", &T);    int cas = 1;    while (T--)    {        memset(plane, false, sizeof(plane));        memset(dp, 0, sizeof(dp));        memset(pre, 0, sizeof(pre));        memset(spot, 0, sizeof(spot));        int N;        scanf("%d", &N);        int i, j;        for (i = 1; i <= N; i++)        {            scanf("%d", &spot[i]);        }        int M;        scanf("%d", &M);        for (i = 1; i <= M; i++)        {            int a, b;            scanf("%d%d", &a, &b);            plane[a][b] = true;        }        spot[N + 1] = 0;        for (i = 1; i <= N + 1; i++)        {            for (j = 1; j<i; j++)            {                if (plane[j][i])                {                    if (dp[j] + spot[i] > dp[i])                    {                        dp[i] = dp[j] + spot[i];                        pre[i] = j;                    }                }            }        }        printf("CASE %d#\n", cas++);        printf("points : %d\n", dp[N + 1]);        printf("circuit : ");        show(pre[N + 1]);        printf("->1\n");                  if(T!=0)        printf("\n");    }    return 0;}
0 0