1 条题解

  • 0
    @ 2025-7-22 11:17:26

    #include<bits/stdc++.h> #define int long long const int inf = 0x3f3f3f3f; const int N = 41; using namespace std; int dp[N][N][N][N]; int a[351]; int w[351]; signed main(){ int n , m; cin >> n >> m; for(int i = 0 ; i < n ; i ++){ cin >> w[i]; } int k1 = 0; int k2 = 0; int k3 = 0; int k4 = 0; for(int i = 1 ; i <= m ; i ++){ cin >> a[i]; if(a[i] == 1){ k1 ++; }else if(a[i] == 2){ k2 ++; }else if(a[i] == 3){ k3 ++; }else{ k4 ++; } } // dp[0][0][0][0] = w[0]; for(int i = 0 ; i <= k1 ; i ++){ for(int j = 0 ; j <= k2 ; j ++){ for(int p = 0 ; p <= k3 ; p ++){ for(int q = 0 ; q <= k4 ; q ++){ int t = w[1 * i + 2 * j + 3 * p + 4 * q]; int v = 0; if(i){ v = max(dp[i - 1][j][p][q] , v); } if(j){ v = max(dp[i][j - 1][p][q] , v); } if(p){ v = max(dp[i][j][p - 1][q] , v); } if(q){ v = max(dp[i][j][p][q - 1] , v); } dp[i][j][p][q] = v + t; } } } } cout << dp[k1][k2][k3][k4]; return 0; }

    • 1

    信息

    ID
    525
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    85
    已通过
    20
    上传者