zoukankan      html  css  js  c++  java
  • USACO 2003 Fall Orange Cow Exhibition /// 负数01背包 oj22829

    题目大意:

    输入n 

    接下来n行 每行输入 a b

    输出n行中 a+b总和最大的同时满足 所有a总和>=0所有b总和>=0的值

    负数的01背包应该反过来

    w[i]为正数时 需要从大往小推 即往0推

    w[i]为负数时 同样应该往0推 即与正数反过来

    #include <bits/stdc++.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    int s[105],f[105],dp[1000*100*2+5];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int mid=n*1000;
            int ed=mid*2+5;
            for(int i=0;i<n;i++) 
                scanf("%d%d",&s[i],&f[i]);
            memset(dp, -INF,  sizeof(dp));
            dp[mid]=0;
            for(int i=0;i<n;i++)
            {
                if(s[i]>=0)
                {
                    for(int j=ed;j>=s[i];j--)
                        dp[j]=max(dp[j],dp[j-s[i]]+f[i]);
                }
                else
                {
                    for(int j=s[i];j-s[i]<ed;j++)
                        dp[j]=max(dp[j],dp[j-s[i]]+f[i]);
                }
            }
            int ans=-ed;
            for(int i=mid;i<ed;i++)
                if(dp[i]>=0) ans=max(ans,i-mid+dp[i]);
            printf("%d
    ",ans);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    C# 使用SMTP发送附件
    C# 获取文件名及扩展名
    邮件添加附件
    WPF 加载GIF动画
    IIS端口被占用 转载
    ReDim Preserve 的用途
    c# 构造函数执行顺序
    WriteLog
    SMS发送短信设置HttpWebRequest
    Directory.GetFiles
  • 原文地址:https://www.cnblogs.com/zquzjx/p/9074764.html
Copyright © 2011-2022 走看看