首页 > 其他 > 详细

Luogu P1541 乌龟棋

时间:2019-10-08 18:11:27      阅读:73      评论:0      收藏:0      [点我收藏+]

gate

四 重 循 环 暴 力 枚 举

因为最终状态是用完所有的牌…所以可以根据用了多少牌来dp

设f[i][j][k][l]表示每种牌用了多少张…它就可以从f[i-1][j][k][k],f[i][j-1][k][l]...转移过来

代码如下

技术分享图片
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#define MogeKo qwq
using namespace std;

int n,m,x,a[405],g[5],f[45][45][45][45];

int main() {
    scanf("%d%d",&n,&m);
    for(int i = 0;i < n;i++)
        scanf("%d",&a[i]);
    for(int i = 1;i <= m;i++){
        scanf("%d",&x);
        g[x]++;
    }
    f[0][0][0][0] = a[0];
    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++){
        if(i) f[i][j][k][l] = max(f[i][j][k][l],f[i-1][j][k][l]+ a[i+2*j+3*k+4*l]);
        if(j) f[i][j][k][l] = max(f[i][j][k][l],f[i][j-1][k][l]+ a[i+2*j+3*k+4*l]);
        if(k) f[i][j][k][l] = max(f[i][j][k][l],f[i][j][k-1][l]+ a[i+2*j+3*k+4*l]);
        if(l) f[i][j][k][l] = max(f[i][j][k][l],f[i][j][k][l-1]+ a[i+2*j+3*k+4*l]);
    }
    printf("%d",f[g[1]][g[2]][g[3]][g[4]]);
    return 0;
}
View Code

 

Luogu P1541 乌龟棋

原文:https://www.cnblogs.com/mogeko/p/11636517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!