样例输出4200求助
查看原帖
样例输出4200求助
785704
jiawenbo楼主2024/7/16 16:22
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll V[100000],W[100000],Q[100000];
ll dp[10000][10000];
ll A[100000][3];
int main()
{
    ll n,m;
    scanf("%lld%lld",&m,&n);
    for (ll i = 1; i <= n; i ++)
    {
        scanf("%lld%lld%lld",&V[i],&W[i],&Q[i]);
        if (Q[i])
        {
            A[i][0] ++;
            A[i][A[i][0]] = i;
        }
        W[i] *= V[i];
    }
    for (ll i = 1; i <= n; i ++)
    {
        for (ll j = 1; j <= m; j ++)
        {
            dp[i][j] = dp[i - 1][j];
            if (j >= V[i]) dp[i][j] = max(dp[i][j],dp[i - 1][j - V[i]] + W[i]);
            if (j >= V[i] + V[A[i][1]]) dp[i][j] = max(dp[i][j],dp[i - 2][j - V[i] - V[A[i][1]]] + W[i] + W[A[i][1]]);
            if (j >= V[i] + V[A[i][2]]) dp[i][j] = max(dp[i][j],dp[i - 2][j - V[i] - V[A[i][2]]] + W[i] + W[A[i][2]]);
            if (j >= V[i] + V[A[i][1]] + V[A[i][2]]) dp[i][j] = max(dp[i][j],dp[i - 3][j - V[i] - V[A[i][1]] - V[A[i][2]]] + W[i] + W[A[i][1]] + W[A[i][2]]);
        }
    }
    printf("%lld",dp[n][m]);
    return 0;
}

好人一生平安

2024/7/16 16:22
加载中...