前缀和优化的dp吸氧过去了
查看原帖
前缀和优化的dp吸氧过去了
640499
WCPWCPWCP楼主2023/7/12 15:02
ll n, m, a[maxn], c[10], w[10], dp[5][maxn], sum[maxn];
void slove(){
    for(int i = 1; i <= 4; i ++){
        cin >> c[i];
    }
    cin >> n;
    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= 4; j ++){
            cin >> w[j];
        }
        cin >> m;
        memset(dp, 0, sizeof(dp));
        dp[0][0] = 1;
        for(int j = 1; j <= 4; j ++){
            sum[0] = dp[j - 1][0];
            for(int k = 0; k <= m; k ++){
                if(k - c[j] >= 0) sum[k] = sum[k - c[j]] + dp[j - 1][k];
                else sum[k] = dp[j - 1][k];
            }
            for(int k = 0; k <= m; k ++){
                dp[j][k] += sum[k] - sum[max(0ll, k - c[j] * (w[j] + 1))];
                if(k - c[j] * (w[j] + 1) < 0) dp[j][k] += sum[0];
            }
        }
        cout << dp[4][m] << '\n';
    }
}
2023/7/12 15:02
加载中...