zoukankan      html  css  js  c++  java
  • [USACO]奶牛会展(背包)

    [USACO]奶牛会展

    题目背景

    奶牛想证明它们是聪明而风趣的。为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行

    了面试,确定了每头奶牛的智商和情商。

    题目描述

    贝西有权选择让哪些奶牛参加展览。由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零。满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值。

    输入输出格式

    输入格式:

    • 第一行:单个整数N,1 ≤ N ≤ 400

    • 第二行到第N + 1 行:第i + 1 行有两个整数:Si 和Fi,表示第i 头奶牛的智商和情商,−1000 ≤ Si; Fi ≤ 1000

    输出格式:

    输出格式

    • 单个整数:表示情商与智商和的最大值。贝西可以不让任何奶牛参加展览,如果这样做是最好的,输出0

    输入输出样例

    输入样例#1:

    5
    -5 7
    8 -6
    6 -3
    2 1
    -8 -5

    输出样例#1:

    8

    说明

    选择第一头,第三头,第四头奶牛,智商和为−5+6+2 = 3,情商和为7−3+1 = 5。再加

    入第二号奶牛可使总和提升到10,不过由于情商和变成负的了,所以是不允许的

    被绿题支配的恐惧??? 最开始看到题目是懵逼的,之后看了题解才明白。将智商和情商分别看作容量和价值来做01背包。
    (F[i])表示当智商总和为(i)时,情商的最大值。

    [F[i]=max(F[i-a[k]]+b[k]) ]

    但是有一点我们需要注意,在状态转移的过程中,智商和情商是允许为负数的,所以我们为了考虑到这种情况,将智商往右移(sa)个单位。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int read()
    {
        int x=0,w=1;char ch=getchar();
        while(ch>'9'||ch<'0') {if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
        return x*w;
    }
    int dp[800010],a[410],b[410];
    int main()
    {
        int sa=0,ans=0;
        int n=read();
        for(int i=1;i<=n;i++)
        {
            a[i]=read();b[i]=read();
            if(a[i]>0) sa+=a[i];
        }
        sa=sa*2;
        memset(dp,-0x3f,sizeof(dp));
        dp[sa/2]=0;
        for(int i=1;i<=n;i++)
        {
            if(a[i]>=0)
                for(int j=sa;j>=a[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
                }
            else
                for(int j=0;j<=sa-a[i];j++)
                {
                    dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
                }
        }
        sa/=2;
        for(int i=0;i<=sa;i++)
        {
            if(dp[i+sa]>=0)//这句判断一定不能忘记了
            ans=max(ans,i+dp[i+sa]);
        }
        cout<<ans;
    }
    
  • 相关阅读:
    request Dispatch
    xmlHTTPRequest
    java 文件上传
    文件上传(2)
    文件上传
    Tomcat 加入windows 服务自启动设置
    windows下配置两个或多个Tomcat启动的方法
    HibernateProxy异常处理 java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
    checkbox遍历操作, 提交所有选中项的值
    tomcat结合nginx使用 基础教程
  • 原文地址:https://www.cnblogs.com/lsgjcya/p/9183448.html
Copyright © 2011-2022 走看看