HDU 5074 Hatsune Miku(暴力+DP)

来源:互联网 发布:物竞化学品数据库 编辑:程序博客网 时间:2024/05/22 08:21

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5074

思路:暴力+DP

AC代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x3f3f3f3f;//1061109567typedef long long LL;using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int dp[105][55];int map1[55][55];int num[105];int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n,m;        memset(dp,0,sizeof(dp));        scanf("%d%d",&n,&m);        for(int i=1; i<=m; i++)        {            for(int j=1; j<=m; j++)            {                scanf("%d",&map1[i][j]);            }        }        for(int i=1; i<=n; i++)            scanf("%d",&num[i]);        for(int i=2; i<=n; i++)        {            if(num[i] > 0)            {                if(num[i-1] > 0)                {                    dp[i][num[i]] = dp[i-1][num[i-1]] + map1[num[i-1]][num[i]];                }                else                {                    for(int j=1; j<=m; j++)                    {                        dp[i][num[i]] = max(dp[i][num[i]],dp[i-1][j] + map1[j][num[i]]);                    }                }            }            else            {                if(num[i-1] > 0)                {                    for(int j=1; j<=m; j++)                    {                        dp[i][j] = dp[i-1][num[i-1]] + map1[num[i-1]][j];                    }                }                else                {                    for(int j=1; j<=m; j++)                    {                        for(int k=1; k<=m; k++)                        {                            dp[i][j] = max(dp[i][j],dp[i-1][k] + map1[k][j]);                        }                    }                }            }        }        int ans = 0;        for(int i=1; i<=m; i++)        {            ans = max(ans,dp[n][i]);        }        printf("%d\n",ans);    }    return 0;}


0 0