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

【模板】01背包

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

01背包模板思路

const auto io_sync_off=[]() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return nullptr;
}();


int w[1000];
int v[1000];
int dp[1000];
int main()
{
    int n,V;
    cin>>n>>V;
    for(int i=0;i<n;i++) {
        cin>>v[i]>>w[i];
    }
    // 0表示可以从任意状态转移到 j
    memset(dp,0,sizeof dp);
    for(int i=0;i<n;i++) {
        //由于每个物品只能用一次,为了防止重复计算,需要倒序遍历
        for(int j=V;j>=v[i];j--) {
            //状态转移,要么选择第i件物品,要么不选,取价值最大的
            dp[j] = max(dp[j],dp[j-v[i]] + w[i]);
        }
    }
    int mx=dp[V];
    // 所有的状态都不可达,将0置为0, 即 所有的 j状态必须都要从0转移过去
    memset(dp,-0x3f,sizeof dp);
    dp[0] = 0;
    for(int i=0;i<n;i++) {
        for(int j=V;j>=v[i];j--) {
            dp[j] = max(dp[j],dp[j-v[i]] + w[i]);
        }
    }
    printf("%d\n%d\n", max(mx,0), max(dp[V],0));
    
}


算法常用解题技巧 文章被收录于专栏

算法常用解题技巧

全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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