• XTU1198:Candy(背包)


    版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/libin56842/article/details/26182519

    题目描写叙述

    Henry和Lena近期买了非常多各种各样的糖…他们决定把全部糖分了… 可是两个人都不希望自己糖的总重量比对方少太多, 鉴于不同的糖的味道不尽同样,所以每一个糖都有一个yummy值。

    Henry希望知道在两人得到的糖总质量差不大于m的时候,自己的糖yummy值之和的尽量大。

    输入

    有多组数据 每组数据第一行为两个整数,n,m,(1 <=n <= 100, 0 <= m <= 500) 接下来有两行。每行有n个数,第一行的第i个数表示第i颗糖的重量xi( 0 < xi <= 100)。 第二行的第i个数表示第i颗糖的yummy值 yi( 0 < yi <= 100 )

    输出

    每行输出一组数据的结果, 一个数表示Henry的糖的总yummy值的最大值,假设不存在如题所述的分糖方案,输出-1

     

    例子输入

    1 30
    43
    15
    2 290
    89 22
    76 77
    

    例子输出

    -1
    153
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    int wei[110],val[110],dp[10010];
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)>0)
        {
            memset(dp,-1,sizeof(dp));
            int sum=0;
            for(int i=0; i<n; i++)
            {
                scanf("%d",&wei[i]);
                sum+=wei[i];
            }
            for(int i=0; i<n; i++)
                scanf("%d",&val[i]);
            dp[0]=0;
            int ans=0;
            for(int i=0; i<n; i++)
            {
                for(int j=sum; j>=wei[i]; j--)
                {
                    if(~dp[j-wei[i]])
                    {
                        dp[j]=max(dp[j],dp[j-wei[i]]+val[i]);
                        int ss=sum-j-j;
                        if(ss>=-m&&ss<=m) ans=max(ans,dp[j]);
                    }
                }
            }
            printf("%d
    ",ans?ans:-1);
        }
        return 0;
    }
    


    
                
  • 相关阅读:
    浏览器
    背景图片设置
    用CSS画平行四边形
    git常用操作
    函数Function
    Object类型的创建和访问
    执行环境及作用域
    传值和传引用
    String类型
    HTML< legend >标签
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10805228.html
Copyright © 2020-2023  润新知