Bookshelves

Bookshelves

https://ac.nowcoder.com/acm/problem/112786

Bookshelves

题意

本书,每一本书都有一个价值,现在在不改变书的顺序的条件下,把这本书分成段,设每一段的价值之和为图片说明 ,问sum [ 1 ] & sum [ 2 ] & sum [ 3 ] ....& sum [ k ] 的最大值

分析

1.因为是按位运算要求最大值,首先应该想到的是按位贪心,即从高位到低位贪心。在保证了某一位能够为1时,再去考虑下一位
2. 设图片说明 表示把前j本书放入前i个书架中,能否使二进制的第x位为1,因为我们要固定之前的高位,所以这里的x得累计之前的高位有效的1

代码

#include<bits/stdc++.h>

#define ll long long

using namespace std;

const int N=110;

int n,k;
ll a[N],sum[N];
bool f[N][N];

inline bool check(ll mid)
{
    memset(f,0,sizeof(f));
    f[0][0]=1;
    for (int i=1;i<=k;i++)//前i个书架    
        for (int j=1;j<=n;j++)//前j本书 
            for (int p=0;p<j;p++)
                f[i][j]|=(f[i-1][p]&(((sum[j]-sum[p])&mid)==mid));

    return f[k][n];
}

int main()
{
    scanf("%d%d",&n,&k);
    for (int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        sum[i]=sum[i-1]+a[i];
    }

    ll ans=0;
    for (int i=60;i>=0;i--)
    {
        ll ok=(ans|(1ll<<i));
        if(check(ok)) ans=ok;
    }

    printf("%lld\n",ans);

    return 0;
}
每日一题 文章被收录于专栏

每天的题,为了牛币

全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
没事就爱看简历:问题不在于简历:1、大学主修课程学那么多应用语言,作为计算机专业是很难理解的。 2、技能部分,每一个技能点的后半句话,说明对熟练,熟悉的标准有明显误会。 3、项目应该是校企合作的练习吧,这个项目你负责什么,取得了哪些成果都没有提及,只是列举了你认为有技术含量的点,而这些都有成熟的实现。
点赞 评论 收藏
分享
EEbond:给北邮✌️跪了
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客企业服务