关闭

NYOJ 311 完全背包

标签: 动态规划背包ACM
89人阅读 评论(0) 收藏 举报
分类:

题目链接
对于背包的各种问题,其实感觉都还没有理解到位。。感觉不太能理解为何背包问题是从前向后推,而完全背包是从后向前推,,虽然之前把序列来来回回输出了好多遍,现在貌似还不是那么清晰。。遇到这个问题百度了一下代码,竟如此简单。。好吧。。我就先借这代码记住一些背包的知识,随着对动态规划理解的深入,以后再搞个背包的专题弄明白。。
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;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6020次
    • 积分:651
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:3篇
    • 译文:0篇
    • 评论:1条
    最新评论