• 玲珑杯 1125 咸鱼商店


    SAMPLE INPUT
    3 10 1
    1 2
    10 1
    5 5
    SAMPLE OUTPUT
    5
    对价值排序,每次二分价值,剩下的就是一个典型的01背包问题。
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <ctime>
    #include <map>
    #include <set>
    using namespace std;
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>y?x:y)
    #define min(x,y) (x<y?x:y)
    #define MAX 100000000000000000
    #define MOD 1000000007
    #define pi acos(-1.0)
    #define ei exp(1)
    #define PI 3.141592653589793238462
    #define INF 0x3f3f3f3f3f
    #define mem(a) (memset(a,0,sizeof(a)))
    typedef long long ll;
    int n,m,k,ans;
    int dp[1006];
    struct Node
    {
        int cost;
        int val;
        friend bool operator<(const Node &a,const Node &b)
        {
            return a.val>b.val;
        }
    }node[1006];
    int check(int mid)
    {
        int i;
        memset(dp,0,sizeof(dp));
        for(i=0;i<n;i++)
        {
            if(node[i].val<mid) break;
            for(int j=m;j>=node[i].cost;j--)
            {
                dp[j]=max(dp[j],dp[j-node[i].cost]+node[i].val);
            }
        }
        for(int i=0;i<=m;i++)
        {
            if(dp[i]>=k)
            {
                return 1;
            }
        }
        return 0;
    }
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&node[i].cost,&node[i].val);
        }
        sort(node,node+n);
        int l=0,r=1000000,ans=-1;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(check(mid)==1)
            {
                ans=mid;
                l=mid+1;
            }
            else r=mid-1;
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    用Python随机生成一个六位验证码(验证码由数字和字母组成(大小写字母))
    0.4 uwsgi和nginx部署常见问题及解决
    Android小笔记
    Android之背景透明度
    Android开发中的错误总结
    Android “再按一次退出“
    java数组对象的复制
    Android之OpenCv
    学习资料
    Android常用正则表达式
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7219395.html
Copyright © 2020-2023  润新知