CF 680D 贪心+构造.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF 680D 贪心+构造.相关的知识,希望对你有一定的参考价值。

题意:若当前体积为X,则每次选一个最接近X的三次方数(p^3<=X)填入.

确定不超过m的X,使得操作次数最多?若有最大操作次数有多种方案,输出X最大的那一种. m<=1e15.

 

x确定ans也就确定 m很大 直接确定x是不可能的.
令最大的a满足,a^3<=m. 则第一个塞的长度最大为a,最多剩下m-a^3
如果塞边长a-1的 则体积最大剩下a^3-1-(a-1)^3 保证一开始的体积<a^3.
塞a-2的 则最大剩下 (a-1)^3-1-(a-2)^3 此时同样塞了一个,第二个可以选择的空间明显更大 则只考虑前两个即可.(第一个剩余相对大小未知)
某个初始状态塞完a-2后若剩余体积为x 则可以构造出另外一个初始状态塞完(a-1)后也为x. 塞(a-1)绝对不会差.
每次X最大可选范围减少m^(1/3) 暴力dfs即可.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> ii;
const int N=2e5+20;
ll m;
ii ans;
ll f(ll a)
{
    return a*a*a;
}
void dfs(ll m,ll cur,ll vol)
{
    if(m==0)
    {
        ans=max(ans,ii(cur,vol));
        return;
    }
    ll a=0;
    while(f(a+1)<=m)
        a++;
    dfs(m-a*a*a,cur+1,vol+a*a*a);
    if(a-1>=0)
    {
        ll t=(a-1);
        dfs(a*a*a-1-t*t*t,cur+1,vol+t*t*t);
    }
}
int main()
{
    while(cin>>m)
    {
        dfs(m,0,0);
        printf("%I64d %I64d\n",ans.first,ans.second);
    }
    return 0;
}
 

 

以上是关于CF 680D 贪心+构造.的主要内容,如果未能解决你的问题,请参考以下文章

构造题 贪心cf1041E. Tree Reconstruction

[CF1264B] Beautiful Sequence - 构造,贪心

[CF1264B] Beautiful Sequence - 构造,贪心

CF #724(div2)A. Omkar and Bad Story,贪心,构造序列

CF.911F.Tree Destruction(构造 贪心)

Codeforces Round #619 (Div. 2)/CF1301 思维+贪心+模拟+构造+二维ST表