首页 > 其他分享 >题解:CF633D Fibonacci-ish

题解:CF633D Fibonacci-ish

时间:2024-10-25 10:58:57浏览次数:8  
标签:int 题解 now1 ++ hh ish 序列 CF633D now2

涉及知识点:枚举,STL

题目大意

给你一个序列,让你选出一些元素,使其构成 fibonacccccci 数列,求数列的最大长度。

解题思路

定义一个桶,$mp_i$ 代表 $i$ 这个数在输入序列当中出现的次数。

由于 $n \le 1000$,所以可以直接暴力枚举 fibonacccccci 数列的前两个数。

前两个数固定了,这个序列的所有数字都固定了,只需要判断当前序列的下一个数字可不可以组合出来。

map<int, int> hh;
int cnt = 2;
int now1 = a[i];
int now2 = a[j];
hh[now1]++, hh[now2]++;
while (hh[now1 + now2] < mp[now1 + now2]) {
  int t = now1;
  now1 = now2;
  now2 = t + now2;
  hh[now2]++;
  cnt++;
}

再来说一下剪枝。

  1. 如果序列里包含 $0$,先把 $ans$ 初始化成 $0$ 的个数,这样就可以防止枚举起点的多余计算。
  2. 如果序列包含两个及以上个 $0$,需要在枚举前两个数时特判,因为起始两个 $0$ 的序列全是 $0$,会在第 $1$ 种剪枝当中直接计算出来最优解。
  3. 如果前一个序列的第 $1$ 个数和这个序列的第 $1$ 个数相同,说明两个序列是完全一样的,直接跳过当前序列,计算下一个序列。

最后,统计每个序列长度,取最大值即可。

代码

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define il inline
using namespace std;

const int N = 1000 + 10;

int n, a[N];
map<int, int> mp;
int ans;
vector<int> v;

il void Init() {
	cin >> n;
	for (int i = 1; i <= n; i ++ ) cin >> a[i];
}

il void Solve() {
	for (int i = 1; i <= n; i ++ ) mp[a[i]]++;//统计数字出现个数
	ans = max(ans, mp[0]);//剪枝1
	sort(a + 1, a + n + 1);
	for (int i = 1; i <= n; i ++ )
		for (int j = 1; j <= n; j ++ ) {
			if (i == j) continue;//起始不能为同一个位置的数
			if (a[i] == 0 && a[j] == 0) continue;//剪枝2
			if (i > 1 && a[i - 1] == a[i]) break;//剪枝3
			map<int, int> hh;//统计当前序列数字出现的个数
			int cnt = 2;
			int now1 = a[i];
			int now2 = a[j];
			hh[now1]++, hh[now2]++;
			while (hh[now1 + now2] < mp[now1 + now2]) {
				int t = now1;
				now1 = now2;
				now2 = t + now2;
				hh[now2]++;
				cnt++;//统计当前序列长度
			}
			ans = max(ans, cnt);//更新答案
		}
	cout << ans;
}

signed main() {
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
//	freopen("fibonacci.in", "r", stdin);
//	freopen("fibonacci.out", "w", stdout);
	int T = 1;
//	cin >> T;
	while (T--) {
		Init();
		Solve();
	}
}

通过记录

标签:int,题解,now1,++,hh,ish,序列,CF633D,now2
From: https://www.cnblogs.com/zla2012/p/18502064

相关文章

  • vue 项目history模式刷新404问题解决办法
    前言vue项目history模式部署到服务器后,根路径访问没有问题,但是进入其他功能再刷新页面就会出现404,因为你没在nginx或者apache配置上面加上重定向跳转。解决办法,只需要加上这段配置:nginx配置内容:location/{try_files$uri$uri/@router;indexindex.html;}lo......
  • 蓝桥杯大赛 ——首场算法团队战题解
    1. 不同角度【算法赛】在生活中,我们总是根据数值的大小来判断两个数字的大小关系。例如,9999 总是小于 100100,999999 总是小于 10001000。但如果我们换一个角度,将 999999 和 10001000 看成是两个数字字符串,并用字典序来比较它们的大小,那么此时,999999 将大于 10001000。......
  • [题解]P4552 [Poetize6] IncDec Sequence
    P4552[Poetize6]IncDecSequence我们对\(a\)做差分,得到数组\(b\)。\(a\)的区间修改,等价于选定\(i,j\in[1,n+1]\),令\(b[i]\leftarrow(b[i]+1),b[j]\leftarrow(b[j]-1)\),我们的目标是让\(b[2\simn]\)全为\(0\)。记\(x,y\)分别表示\(b[2\simn]\)中正数之和、负数的绝对值之和......
  • [Coci2011]kamion 题解
    前言题目链接:Hydro&bzoj;黑暗爆炸。题意简述给你一张\(n\)个点\(m\)条边的有向图。有\(p\)种括号,每条边的边权可以是这\(p\)种括号中某一种的左括号或者右括号,也可以为空。问你有多少条从\(1\)开始到\(n\)的长度小于等于\(k\)的路径,满足括号匹配,或者剩余若干未......
  • 题解:P3012 [USACO11FEB] Cowlphabet G
    [USACO11FEB]CowlphabetG题意有\(P\)种拼接方式,问由\(U\)个大写字母和\(L\)个小写字母合法组合的方案数。输出方案数对\(97654321\)取模的值。思路动态规划,还没有人写逆推方法,刚好我做的逆推。设\(f[i][j][z]\)表示一共有\(i\)个字母,其中\(j\)个为小写字母,......
  • 题解:CF2030C A TRUE Battle
    LuoguLink|CodeforcesLink\(\texttt{Describe}\)给一个长度为\(n\)的二进制序列,Alice和Bob在相邻两个0/1中间分别加\(\operatorname{or}\)或\(\operatorname{and}\)操作,优先级满足\(\operatorname{and}>\operatorname{or}\)。Alice希望最后运算的值为\(1\),Bo......
  • P8164 [JOI 2022 Final] 沙堡 2 题解
    DescriptionJOI君在沙滩上堆沙堡,他已经做好了一个沙堡,沙堡可以使用一个\(H\timesW\)的二维矩形表示,其被划分成若干个\(1\times1\)的小格子,格子高度互相不同。JOI君决定在沙堡上游走,他可以从任意一个点出发,向上下左右四个方向行走,必须满足他行走的路径单调下降。出于一......
  • 题解:Maximum AND
    ProblemLinkMaximumAND题外话用sort肘过去了?题面翻译给定数组\(a\)和\(b\),重排\(b\)数组,求\(a_i\oplusb_i\)之后与和的最大值。Solution不难想到按位贪心。从最高位开始,逐位讨论是否能为\(1\)。接下来有一个做法:先将\(a\)数组升序排序,\(b\)数组降序排......
  • AtCoder Regular Contest 185 题解
    A-modMGame2第一个观察是如果一个人手中还有2张牌,那么他一定不会被秒。这可以推出决定胜负的时刻一定是Alice和Bob手中只剩一张牌的时候,此时如果Alice被秒了,那么她就似了,否则她就赢了。考虑Alice什么时候能被秒。记决定胜负的时刻Alice手中的牌是\(a\),Bob手......
  • 23~24 炼石计划 NOIP 练习题部分题解
    目录目录第1组JOISC2017火车旅行IOI2018会议CF1558FStrangeSortAPIO2018新家CTSC2017密钥CF1748EYetAnotherArrayCountingProblem第2组NOI2016区间LOJ552MIN&MAXIJOISC2023合唱LOJ542序列划分LOJ560Menci的序列P8978中位数第3组USACO20FEBHelpYourse......