HDU 3496 - Watch The Movie (二维背包)

题意

小明看电影有限制,最多选m部,看l分钟长。问在此前提下他能获得的最大满意值。

思路

二维背包。要滚一下。

代码

int dp[110][1100];
pii arr[MAXN];
 
int main()
{
    //ROP;
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int n, m, l;
        scanf("%d%d%d", &n, &m, &l);
        for (int i = 0; i <= m; i++)
            for (int j = 0; j <= l; j++)
                dp[i][j] = (i == 0 ? 0 : -INF);
        for (int i = 1; i <= n; i++) scanf("%d%d", &arr[i].X, &arr[i].Y);
        for (int i = 1; i <= n; i++)
            for (int j = m; j >= 1; j--)
                for (int k = l; k >= arr[i].X; k--)
                    dp[j][k] = max(dp[j][k], dp[j-1][k-arr[i].X] + arr[i].Y);
        printf("%d\n", max(0, dp[m][l]));
    }
    return 0;
}

Powered by Jekyll and Theme by solid