比赛 20231212_2010联赛题复现 评测结果 AAAAAAAAAA
题目名称 乌龟棋 最终得分 100
用户昵称 小金 运行时间 0.013 s
代码语言 C++ 内存使用 6.41 MiB
提交时间 2023-12-12 21:51:29
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int f[45][45][45][45],num[450],g[10],n,m;
int main()
{
    freopen("tortoise.in","r",stdin);
    freopen("tortoise.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>num[i];
    }
    f[0][0][0][0]=num[1];
    for(int i=1;i<=m;i++)
    {
        int x;
        cin>>x;
        g[x]++;
    }
    for(int i=0;i<=g[1];i++)
    {
        for(int j=0;j<=g[2];j++)
        {
            for(int k=0;k<=g[3];k++)
            {
                for(int l=0;l<=g[4];l++)
                {
                    int s=1+i+j*2+k*3+l*4;
                    if(i!=0)
                    {
                        f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l]+num[s]);
                    }	
                    if(j!=0)
                    {
                        f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l]+num[s]);
                    }    
                    if(k!=0)
                    {
                        f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-1][l]+num[s]);
                    }    
                    if(l!=0)
                    {
                        f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-1]+num[s]);
                    }  	
                }
            }
        }
    }
    cout<<f[g[1]][g[2]][g[3]][g[4]];
    return 0;
}