社区讨论

TLE求助,两个经验已过

UVA11196Birthday Cake参与者 9已保存回复 16

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
15 条
当前快照
1 份
快照标识符
@m2hh7hnx
此快照首次捕获于
2024/10/20 19:00
去年
此快照最后确认于
2025/11/04 23:50
4 个月前
查看原帖
两个经验:P1731,SP1452已过
这个TLE了。求调QwQ。
CPP
#include<bits/stdc++.h>
using namespace std;
// #define int long long
int n,m,ans=INT_MAX,r[20],h[20];
int mv[20],ms[20];
void dfs(int x,int s,int v)
{
    if(s+ms[x]+r[m]*r[m]>=ans||v+mv[x]>n||2*(n-v)/r[x+1]+s>=ans)return;
    if(!x)
    {
        if(v==n)ans=s+r[m]*r[m];
        return;
    }
    for(register int R=min((int)sqrt(n-v),r[x+1]-1);R>=x;R--)
    for(register int H=min((int)((n-v)/R/R),h[x+1]-1);H>=x;H--)
    {
        r[x]=R;
        h[x]=H;
        dfs(x-1,s+2*R*H,v+R*R*H);
    }
}
signed main()
{
    cin.tie(0)->sync_with_stdio(0);
    int tot=0;
    for(int i=1;i<=10;i++)
    {
        mv[i]=mv[i-1]+i*i*i;
        ms[i]=ms[i-1]+2*i*i;
    }
    while(cin>>n&&n)
    {
        cout<<"Case "<<++tot<<": ";
        cin>>m;
        h[m+1]=r[m+1]=ans=2e9;
        h[m]=r[m]=0;
        dfs(m,0,0);
        if(ans==2e9)ans=0;
        cout<<ans<<endl;
    }
    return 0;
}
验证码t7dp祭

回复

16 条回复,欢迎继续交流。

正在加载回复...