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;
    }
  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/sy1in/p/7860432.html
Copyright © 2011-2022 走看看