zoukankan      html  css  js  c++  java
  • UPC10755 You Like Cake

    题目描述

    双十一就要来啦!而Yuno刚刚获得了一笔X元的奖金。那么是不是应该清空下购物车呢?
    购物车总共有N个物品,每个物品的价格为Vi,Yuno想尽可能地把手头的奖金给花光,所以她要精心挑选一些商品,使得其价格总和最接近但又不会超过奖金的金额。那么Yuno最后最少可以剩下多少钱呢?

    输入

    第一行,两个正整数N和X。
    第二行,N个正整数Vi表示第i个物品的价格。

    输出

    输出一个整数,表示Yuno最后最少可以剩下的钱数。

    样例输入

    4 50
    1 2 3 4
    

    样例输出

    40
    

    提示

    对于100的数据,N≤40,X,Vi≤109

    以前做过的题…… ,考试周没写代码结果考完训练的时候就想不出来怎么写了,菜爆了。

    2^40很大,但是分成两半变成2^20就是枚举可以接受的复杂度了。分别算出左半边和右半边各自的各种组合,然后对于左边每一种情况在右边进行二分,寻找最优解

    i&(i-1)  //将数字二进制中的最右边一个1及其后面的位取反

    #include "bits/stdc++.h"
    
    using namespace std;
    typedef long long ll;
    const int maxn = 1 << 21;
    
    ll v[maxn];
    ll lv[maxn], rv[maxn];
    
    int main() {
        freopen("input.txt", "r", stdin);
        ll n, x;
        cin >> n >> x;
        int mid = n >> 1;
        ll ln = 1 << mid;
        ll rn = 1 << (n - mid);
        ll tmp;
        for (int i = 0; i < mid; i++) {
            cin >> v[1 << i];
        }
        for (int i = 1; i <= ln; i++) {
            tmp = i & (i - 1);
            lv[i] = v[i ^ tmp] + lv[tmp];
        }
        for (int i = 0; i < n - mid; i++) {
            cin >> v[1 << i];
        }
        for (int i = 1; i <= rn; i++) {
            tmp = i & (i - 1);
            rv[i] = v[i ^ tmp] + rv[tmp];
        }
        sort(rv, rv + rn);
        ll ans = -1;
        ll temp;
        int pos;
        for (int i = 0; i <= ln; i++) {
            if (lv[i] > x) continue;
            temp = x - lv[i];
            pos = upper_bound(rv, rv + rn, temp) - rv - 1;
            ans = max(ans, lv[i] + rv[pos]);
        }
        cout<<x-ans<<endl;
        return 0;
    }
  • 相关阅读:
    后端框架:SpringBoot+Mybatis+Dubbox(zookeeper+dubbo-admin)
    java代码执行mysql存储过程
    SpringBoot整合Junit
    摘要算法之MD5
    java如何控制下载的文件类型是txt还是doc?如何将文件名返回给前端?Content-disposition
    Android Atuido 连接模拟器
    verilog CRC 校验
    Altium Designer(AD软件)如何导出gerber文件
    SpringBoot集成mybatisplus
    C++ | 通过智能指针实现资源管理
  • 原文地址:https://www.cnblogs.com/albert-biu/p/10284236.html
Copyright © 2011-2022 走看看