首页 > 其他分享 >Elevator Rides

Elevator Rides

时间:2024-07-28 16:40:33浏览次数:11  
标签:空位 遍历 ll 最小 Elevator 子集 乘坐 Rides

原题链接

题解

看到数据范围,想到二进制表示所有已经上去的人的集合的最小乘坐次数,做法为遍历所有子集再遍历所有子集 时间复杂度 \(\sum_{k=0}^n C_n^k 2^k =\ O(3^n)\)

太高了

考虑优化,对于同一个集合、同样最小乘坐次数,总有电梯有空位,而空位越大的乘坐配置越优

依照这个性质,我们在记录某个子集的最小乘坐次数时,再记录其最大的空位

这样一来,我么就不需要对子集的子集进行遍历,只需要对子集的某个人进行遍历

因为对于任意一个子集,总有一个人是最后一个走进电梯里的

而要使子集最优,一定是这个人走进去之前的子集的乘坐次数最小的同时空位最小

code

#include<bits/stdc++.h>
#define ll long long
#define lowbit(x) ((x)&(-x))
using namespace std;
const ll inf=1e18;

void solve()
{
    ll n,W;
    cin>>n>>W;
    vector<ll> a(n);
    for(ll i=0;i<n;i++) cin>>a[i];

    vector<pair<ll,ll> > dp((1<<n)+10);
    dp[0]={1,0};//载零个人上去,需要一部电梯,载了最少重量的电梯载了0
    for(ll i=1;i<=(1<<n)-1;i++)
    {
        ll tem=i;

        ll t=2e9,w=W;
        while(tem)
        {
            ll now=log2(lowbit(tem));
            tem-=lowbit(tem);
            auto [ti,we]=dp[(1<<now)^i];
            if(ti>t) continue;
            if(we+a[now]<=W)
            {
                if(ti<t)
                {
                    t=ti;
                    w=we+a[now];
                }
                else w=min(we+a[now],w);
            }
            else
            {
                if(ti+1<t)
                {
                    t=ti+1;
                    w=min(a[now],we);
                }
                else w=min(w,min(a[now],we));
            }
        }

        dp[i]={t,w};
    }

    cout<<dp[(1<<n)-1].first;
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ll TT=1;
    while(TT--) solve();
    return 0;
}



标签:空位,遍历,ll,最小,Elevator,子集,乘坐,Rides
From: https://www.cnblogs.com/pure4knowledge/p/18328403

相关文章

  • flutter开发项目编译失败依赖冲突的解决方法dependency_overrides
    1.问题在复杂的稍等大点的flutter项目当中,依赖各种第三方框架是很正常,而且也有有很多依赖的,但有时难免存在不同的框架刚好使用了同一个依赖库的不同版本,特别是依赖了系统的某个库的不同版本这个时候就难免会出现同一个依赖库不同版本冲突的编译失败问题2.现象Becauseflut......
  • both methods have same erasure, yet neither overrides the other
    泛型,作为JDK5时代引入的”语法糖“,在编译的时候是会被抹除的,换言之,specialSort(List<Dog>)和specialSort(List<Apple>)在编译时都会变成specialSort(List),因此不符合重载的原则(变量名相同、参数类型或数量不同)。参考:https://blog.csdn.net/m0_37676618/article/details/106714182......
  • 洛谷 P9579「Cfz Round 1」Elevator 另类题解
    一个赛时想到的另类DP做法。Solution容易将原题转化为一个人乘电梯每次上下一层。对于\(a_i<b_i\)是好处理的,记\(\displaystylem=\max_{1\leqi\leqn}\{a_i,b_i\}\),只需要跑到\(m\)即可解决所有这种条件。对于\(a_i>b_i\)的条件,我们除了到\(m\)外,还需要额外地从......
  • cocoaPod 执行 pod install 时出现警告:The `XX [Release]` target overrides the `CLA
    最近执行Podinstall安装命令时,控制台输出警告信息:[!]The`XXX[Debug]`targetoverridesthe`CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES`buildsettingdefinedin`Pods/TargetSupportFiles/Pods-XXX/Pods-XXX.debug.xcconfig'.Thiscanleadtop......
  • [ARC104C] Fair Elevator 题解
    题意有\(N\)个区间\([a_i,b_i](a_i<b_i)\),都是\([1,2n]\)内的整数且互不相同(\(a_i\neb_j,a_i\nea_j,b_i\neb_j\))。现在给定一些\(a\)和\(b\)的值,剩下不知道的用\(-1\)表示。问是否存在一种替换掉\(-1\)的方案,使得:若两个区间有交,那么它们长度相等。即\(\forall......
  • PAT 甲级1008【1008 Elevator】
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.StreamTokenizer;publicclassMain{@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args)throwsIOException{......
  • blockchain | ethernaut 11 Elevator
    blockchain|ethernaut11Elevator这关就是简单的合约交互,以及view/pure函数的编写。合约://SPDX-License-Identifier:MITpragmasolidity^0.8.0;interfaceBuilding{functionisLastFloor(uint)externalreturns(bool);}contractElevator{boolpublict......
  • P9579「Cfz Round 1」Elevator
    思路假设\(a_i\)和\(b_i\)的最大值是\(maxn\)。可以发现序列\(1,2,3\cdotsmaxn\)一定是要构造的序列的子序列。那么,这种情况下,一定满足了所有的\(a_i<b_i\),因为\(a_i\neqb_i\),所以我们只需要单独满足所有的\(a_i>b_i\)就可以了。对于所有的\(a_i>b_i\),我们有两......
  • mybatics之prefixOverrides
    1.<trimprefix=""suffix=""suffixOverrides=""prefixOverrides=""></trim>prefix:在trim标签内sql语句加上前缀。suffix:在trim标签内sql语句加上后缀。suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句......
  • 用Elevator优化AV1视频播放
    AOM会员Vimeo通过Elevator改善AV1解码过程中的丢帧和质量下降问题。感谢Google软件工程师姜健对本文做的技术审校。文/RaphaëlZumer译/刘俊技术审校/姜健https://medium.com/vimeo-engineering-blog/enhancing-av1-playback-with-elevator-6a2991c1aac0作为AV1编码标准的早......