题解 | #去掉空行#

【模板】01背包

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

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,v;
    cin >> n >>v;
    vector<int>weight(n),value(n);
    for(int i = 0;i <= n;i++)
        cin >> weight[i] >> value[i];
    vector<int>dp(v+1,0),dp2(v+1,INT_MIN);//dp2[v]指能否装满,如果装满则它的结果发生变化,否则装不满。
    dp2[0] = 0;//初始化是刚好装满的关键,因为 dp2[j] = max(dp2[j],dp2[j-weight[i]] + value[i]);
    for(int i = 0;i< n;i++)//如果j-weight[i]减到刚好得0,那么说明刚好可以装满,否则,不可以装满。
    {
        for(int j = v;j >= weight[i];j--)
        {
            dp[j] = max(dp[j],dp[j-weight[i]] + value[i]);
            dp2[j] = max(dp2[j],dp2[j-weight[i]] + value[i]);
        }
    }
    int res = dp2[v]>0?dp2[v]:0;
    cout << dp[v] <<endl;
    cout << res <<endl;
    return 0;
}
全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务