题解luogu P1776 宝物筛选

Posted lovezxy520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解luogu P1776 宝物筛选相关的知识,希望对你有一定的参考价值。

一道多重背包问题,要二进制优化。

#include<bits/stdc++.h>
using namespace std;
int cnt, dp[100005], n, w[100005], v[100005], s, m, vv, ww;
int main()

    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    
        cin >> ww >> vv >> s;
        for(int j = 1; j <= s; j <<= 1)
        
            v[++cnt] = j*vv;
            w[cnt] = j*ww;
            s -= j;
        
        if(s)
        
            v[++cnt] = s*vv;
            w[cnt] = s*ww;
        
    
    for(int i = 1; i <= cnt; i++)
        for(int j = m; j >= v[i]; j--)
            dp[j] = max(dp[j], dp[j-v[i]]+w[i]);
    cout << dp[m];
    return 0;

 

以上是关于题解luogu P1776 宝物筛选的主要内容,如果未能解决你的问题,请参考以下文章

P1776 宝物筛选_NOI导刊2010提高(02)(背包的二进制优化)

[洛谷P1776]宝物筛选

BZOJ1076:[SCOI2008]奖励关——题解

洛谷 1776 宝物筛选 多重背包+二进制拆分

宝物筛选

SCOI2008奖励关 题解(状压DP+期望)