社区讨论
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 条回复,欢迎继续交流。
正在加载回复...