求助
查看原帖
求助
672940
wdd2929楼主2024/9/12 20:49
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int q,a2,a3,a4,b4,b6;
    scanf("%d",&q);
    while(q--){
        scanf("%d%d%d%d%d",&a2,&a3,&a4,&b4,&b6);
        int dp[a2+5][a3+5][a4+5][b4+5][b6+5]={0};
        for(int i=0;i<=a2;i++)
            for(int j=0;j<=a3;j++)
                for(int k=0;k<=a4;k++)
                    for(int l=0;l<=b4;l++)
                        for(int m=0;m<=b6;m++){
                            //分情况
                            //1.4桌
                            dp[i+1][j][k][l+1][m]=max(dp[i+1][j][k][l+1][m],dp[i][j][k][l][m]+2);
                            dp[i][j+1][k][l+1][m]=max(dp[i][j+1][k][l+1][m],dp[i][j][k][l][m]+3);
                            dp[i][j][k+1][l+1][m]=max(dp[i][j][k+1][l+1][m],dp[i][j][k][l][m]+4);
                            dp[i+2][j][k][l+1][m]=max(dp[i+2][j][k][l+1][m],dp[i][j][k][l][m]+4);
                            //2.6桌
                            dp[i+1][j][k][l][m+1]=max(dp[i+1][j][k][l][m+1],dp[i][j][k][l][m]+2);
                            dp[i][j+1][k][l][m+1]=max(dp[i][j+1][k][l][m+1],dp[i][j][k][l][m]+3);
                            dp[i][j][k+1][l][m+1]=max(dp[i][j][k+1][l][m+1],dp[i][j][k][l][m]+4);
                            dp[i+2][j][k][l][m+1]=max(dp[i+2][j][k][l][m+1],dp[i][j][k][l][m]+4);
                            dp[i+1][j+1][k][l][m+1]=max(dp[i+1][j+1][k][l][m+1],dp[i][j][k][l][m]+5);
                            dp[i+1][j][k+1][l][m+1]=max(dp[i+1][j][k+1][l][m+1],dp[i][j][k][l][m]+6);
                            dp[i+3][j][k][l][m+1]=max(dp[i+3][j][k][l][m+1],dp[i][j][k][l][m]+6);
                            dp[i][j+2][k][l][m+1]=max(dp[i][j+2][k][l][m+1],dp[i][j][k][l][m]+6);
                        }
        printf("%d\n",dp[a2][a3][a4][b4][b6]); 
    }
    // system("pause");
    return 0;
}
2024/9/12 20:49
加载中...