题解 NOI1999【生日蛋糕】—— 洛谷
自己想出这题的大佬蒟蒻在这儿%您了
我实在是太弱了,搜索这种辣鸡算法都不会(逃
这题真的是想了好久,每次都会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;//功德圆满
题解 NOI1999【生日蛋糕】—— 洛谷的更多相关文章
- 【题解】【洛谷 P1967】 货车运输
目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输. 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph ...
- Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731
生日蛋糕 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ ...
- [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂
题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...
- [题解] BZOJ 3456 洛谷 P4841 [集训队作业2013]城市规划 多项式,分治FFT
题目 令\(f_i\)表示n个点的答案.考虑容斥,用所有连边方案减去有多个连通块的方案.枚举1号点所在的连通块大小: \(f_i=2^{i(i-1)/2}-\sum_{j>0}^{i-1}f_j ...
- BZOJ3675 & 洛谷3648 & UOJ104:[Apio2014]序列分割——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3675 https://www.luogu.org/problemnew/show/P3648 ht ...
- 【CJOJ1494】【洛谷2756】飞行员配对方案问题
题面 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1 ...
- 洛谷2973 [USACO10HOL]赶小猪Driving Out the Piggi… 概率 高斯消元
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - 洛谷2973 题意概括 有N个城市,M条双向道路组成的地图,城市标号为1到N.“西瓜炸弹”放在1号城市,保证城 ...
- 【洛谷】【单调栈】P4333 [COI2007] Patrik
--接上一篇题解,[洛谷][单调栈]P1823音乐会的等待 关于题目大意在上一篇题解里已经说清楚了,这里不再多阐述 想看题目->戳这里 [算法分析:] 在对元素a进行判断时,如果它与栈顶元素相等 ...
- 洛谷 P1056 排座椅 桶排序
桶排序大法好! 每次一看到这种范围小的题,本萌新就想用桶排. 因为题目中的m,n都小于1000,我们就可以定义两个1000的数组,表示每一行或每一列可以隔开几对讲话的童鞋. 然后再定义两个1000的数 ...
- 洛谷 P1045 【麦森数】快速幂
不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...
随机推荐
- Django中查询相关操作
查询集特性 1)惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询. 2)缓存:当使用的是同一个查询集时,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个 ...
- Java IO: OutputStream
原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) OutputStream类是Java IO API中所有输出流的基类.子类包括Buffere ...
- Spring Boot 之 Redis详解
Redis是目前业界使用最广泛的内存数据存储. Redis支持丰富的数据结构,同时支持数据持久化. Redis还提供一些类数据库的特性,比如事务,HA,主从库. REmote DIctionary S ...
- CHI 2015大会:着眼于更加个性化的人机交互
2015大会:着眼于更加个性化的人机交互" title="CHI 2015大会:着眼于更加个性化的人机交互"> 本周,人机交互领域的顶级盛会--2015年ACM C ...
- 阿里巴巴-德鲁伊druid连接池配置
阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好,Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给Data ...
- 在linux中自动向设备中安装apk包
环境:华为手机 linux centos64 为了锻炼自己,我把脚本文件和APK文件放到了不同的路径下. 需求:将虚拟机中的100个apk包安装到手机中. import os,time os.chdi ...
- webpack里面__dirname意思
- Git学习小结 ~ Lethe's Blog
学习自https://www.liaoxuefeng.com/wiki/896043488029600 一.创建版本库 (1) git init 初始化一个Git仓库 (2)添加文件到Git仓库,分两 ...
- figure设置坐标轴
import matplotlib.pyplot as plt import numpy as np x=np.linspace(-3,3,50) y1=x*2+1 y2=x**2 plt.plot( ...
- Redis:slave flush old data造成实例不可用
一.问题描述 2019-02-22凌晨02:42分前后,收到集群中 [10.32.52.8:6500] 实例不可用告警,登陆管理界面查看此实例在正常运行状态,期间未出现机器宕机或实例直接挂掉的现象. ...