题解 | #【模板】01背包#

【模板】01背包

https://www.nowcoder.com/practice/fd55637d3f24484e96dad9e992d3f62e

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int main() {
    int n, nv;
    cin >> n >> nv;
    vector<int>v(n, 0), w(n, 0);
    // 这里的取值是关键
    vector<int>dp(nv + 1, -N);

    for(int i = 0; i < n; i++)
    cin >> v[i] >> w[i];

    dp[0] = 0;
    for(int i = 0; i < n; i++)
    {
        for(int j = nv; j >= v[i]; j--)
        {
            dp[j] = max(dp[j], dp[j - v[i]] + w[i]); 
        }
    }
    int m = *max_element(dp.begin(), dp.end());
    cout << m << endl;

    if(dp[nv] < 0)dp[nv] = 0;
    cout << dp[nv];
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务