自己想出这题的大佬蒟蒻在这儿%您了

我实在是太弱了,搜索这种辣鸡算法都不会(逃

这题真的是想了好久,每次都会T三个点,我以为我的剪枝已经堆了够多了,结果后来才知道是一个关键剪枝没想到OTZ

先贴代码

#include <bits/stdc++.h>
using namespace std;
#define rint register int
int n, m, ans = 99999999;
int ini1[20], ini2[20];
inline void init( void ){
for( rint i = 1; i <= m; i++ ){
ini1[i] = pow( i, 3 ) + ini1[i - 1];
ini2[i] = 2 * i * i + ini2[i - 1];
}
return ;
}
inline void dfs( int nowv, int nows, int r, int h, int t ){
if( t == 0 ){
if( nows == n ) ans = min( ans, nowv );
return ;
//cout << 1;
}
if( nowv + ini2[t - 1] >= ans ) return ;
//cout << 1;
if( nows + ini1[t - 1] >= n ) return;
//cout << 1;
if( 2 * ( n - nows ) / r + nowv >= ans ) return ;
for( rint i = r - 1; i >= t; i-- ){
//cout << 1;
if( t == m ) nowv = i * i;
int hh = min( h - 1, ( n - nows - ini1[t - 1] ) / ( i * i ) );
for( rint j = hh; j >= t; j-- ){
//cout << t << endl;
dfs( nowv + 2 * i * j, nows + i * i * j, i, j, t - 1 );
}
}
return ;
}
int main( void ){
scanf( "%d%d", &n, &m );
init();
int temp = sqrt( n );
//for( int i = 1; i <= m; i++ ) cout << ini[i] << ' ';
dfs( 0, 0, temp + 1, n + 1, m );
if( ans == 99999999 ){
cout << 0;
return 0;
}
cout << ans;
return 0;
}

看这输出的1就知道我错了多少次,结果发现把一个t打成了 \(t - 1\) qwq

关键剪枝

if( 2 * ( n - nows ) / r + nowv >= ans ) return ;

这里详细推一下

1 到$ dep - 1$的体积为

\(n - v = \sum_{k = 1}^{dep - 1}h[k] * r[k] ^ 2\)

表面积为

$2\sum_{k = 1}^{dep - 1}h[k] *r[k] $

又臭又长警告

\(\because2\sum_{k = 1}^{dep - 1}h[k] *r[k] = \frac{2}{r[dep]} * \sum_{k = 1}^{dep - 1}h[k]*r[k]*r[dep]\geqslant \frac{2}{r[dep]} *\sum_{k = 1}^{dep - 1}h[k]*r[k]^2\geqslant \frac{2(n - v)}{r[dep]}\)

\(\therefore\)当$ \frac{2(n - v)}{r[dep]} + s \geqslant ans$时说明已经不是最优,即可return

这是对前\(dep - 1\)层侧面积的估计,很多人忽略了这一维度,其实,这一维度已经在我们预处理\(ini\)

(别激动,\(init\)删去\(t\)而已23333)时已经有所涉及,只是我们没有太在意而已

这告诉我们在设计剪枝条件的时候一定要全方面考虑

,每个维度都有所思考,尽可能到达上下界

return 0;//功德圆满

最新文章

  1. Linux常用命令集合
  2. 利用print2flashsetup.exe文档转swf
  3. UVA 573 (13.08.06)
  4. iOS学习之页面之间传值的方式总结
  5. JS精粹(二)
  6. HibernateTemplate的使用
  7. 十三.iptabled配置
  8. 迁移virtualenv环境
  9. 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
  10. [Java] Header checkBox in Jtable
  11. web.xml文件的简单说明
  12. 一个跳转提示页面---JS
  13. 阿里云CentOS中vsftp安装、配置、卸载
  14. maven根据不同的运行环境,打包不同的配置文件
  15. Charlie&#39;s Change(完全背包+路径记忆)
  16. weblogic.rjvm.PeerGoneException
  17. SDUT 3917
  18. MYSQL学习笔记 (六)explain分析查询
  19. es6+最佳入门实践(6)
  20. 在对方电脑建立IPC连接, 利用IPC$入侵 运行木马

热门文章

  1. 使用mybatis的动态sql解析能力生成sql
  2. Serializable 接口(序列化)
  3. Java中的基本运算符
  4. com.spotify:docker-maven-plugin 报localhost:2375 Connection refused 错误
  5. RxSwift学习笔记之Subject
  6. 使用java列举所有给定数组中和为定值的组合
  7. postgresql学习记录1
  8. 从Instagram“宁静、规则”的成功 看国内APP发展之路
  9. Tian Tian 菾菾 导游 陪同
  10. Mybatis调用存储过程报错