zoukankan      html  css  js  c++  java
  • 洛谷 P2340 奶牛会展

    题目背景

    奶牛想证明它们是聪明而风趣的。为此,贝西筹备了一个奶牛博览会,她已经对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,不过由于情商和变成负的了,所以是不允许的

    状压dp

    题目链接

    #include <cstring>
    #include <cstdio>
    #define M 400005
    #define N 405
    int max(int a,int b) {return a>b?a:b;}
    int n,ans,a[N],b[N],dp[M*2+N];
    int main(int argc,char *argv[])
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i) scanf("%d%d",&a[i],&b[i]);
    //    printf("%d
    ",dfs(1,0,0));
        memset(dp,-127,sizeof(dp));
        dp[M]=0;
        for(int i=1;i<=n;++i)
        {
            if(a[i]>0)
            {
                for(int j=M*2;j>=a[i];--j)
                 dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
            }
            else 
            {
                for(int j=0;j<=M*2+a[i];++j)
                 dp[j]=max(dp[j-a[i]]+b[i],dp[j]);
            }
        }
        for(int i=1;i<=M;++i) if(dp[i+M]>=0) ans=max(ans,dp[i+M]+i);
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    ACM-ICPC 2018 徐州赛区网络预赛 G题
    ACM-ICPC 2018 沈阳赛区网络预赛 K题
    ACM-ICPC 2018 沈阳赛区网络预赛 K题
    数据结构实验之栈与队列七:出栈序列判定
    数据结构实验之栈与队列七:出栈序列判定
    Python isspace()方法
    Python isnumeric()方法
    Python islower()方法
    Python isdigit()方法
    Python isdecimal()方法
  • 原文地址:https://www.cnblogs.com/sy1in/p/7860432.html
Copyright © 2011-2022 走看看