xj13821328013的博客

一只菜鸟的成长历程

NYOJ 311 完全背包

题目链接
对于背包的各种问题,其实感觉都还没有理解到位。。感觉不太能理解为何背包问题是从前向后推,而完全背包是从后向前推,,虽然之前把序列来来回回输出了好多遍,现在貌似还不是那么清晰。。遇到这个问题百度了一下代码,竟如此简单。。好吧。。我就先借这代码记住一些背包的知识,随着对动态规划理解的深入,以后再搞个背包的专题弄明白。。
dp[i]=max(dp[i],dp[i-wi]+ci)//代表占用的重量,dp[i]代表价值。未占用的重量价值为0咯。。
参考代码链接

#include <stdio.h>
#include <string.h>
int dp[50005];
int main()
{
    int t,n,v,c,w;
    scanf("%d",&t);
    while(t--)
    {
        memset(dp,-100,sizeof(dp));
        dp[0]=0;
        scanf("%d %d",&n,&v);
        for(int i=0;i<n;i++)//i代表物品的种类
        {
            scanf("%d %d",&c,&w);//物品种类一边输入一边处理都没用数组,,而我常常复杂化这部分。。
            for(int j=c;j<=v;j++)//与01背包的区别之处
            if(dp[j]<dp[j-c]+w)
            dp[j]=dp[j-c]+w;
        }
        if(dp[v]<0)//没有装入的部分为零。。检验是否装满
        printf("NO\n");
        else
        printf("%d\n",dp[v]);
    }
    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xj13821328013/article/details/52374411
文章标签: 动态规划 背包 ACM
个人分类: 动态规划 ACM
上一篇NYOJ 128 前缀式计算(待续)
下一篇NYOJ 1233 差值
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭