摘要:
【问题分析】 分析题目可得此问题为01背包问题 因此题数据较小 所以可用枚举每一样物品选或不选的方法来写 【设计程序】 #include<bits/stdc++.h> #include<iostream> #include<stdio.h> #include<cstdio> #include<que 阅读全文
摘要:
【问题分析】 分析题目可得此问题为连通块问题 因此题枚举被包围的‘0’较难 所以可用枚举每一个不被包围的‘0’ 【设计程序】 #include<bits/stdc++.h> #include<iostream> #include<stdio.h> #include<cstdio> #include< 阅读全文
摘要:
【问题分析】 本题有n个数(n > 10^6)n很大, 查找m 个数(m≤10^5) ,数最大为(10^9) 方法一:用顺序查找的话时间复杂度为:O(n * m)会超时, 只能得部分分; 方法二:用桶排时间复杂度为O(n)+ O(m),但是因为数最大为(109)空间复杂度为:O(109); 方法三: 阅读全文
摘要:
【题目分析】 本题有两个方法, 方法一:每一个位置可得的分分别求出,打擂找出最大(可得部分分) 方法二:从后往前求可得的分数,以避免一些不必要的重复。 【设计程序】 方法一: #include<bits/stdc++.h> #include<iostream> #include<stdio.h> # 阅读全文
摘要:
【问题分析】 本题考了奇数。 由此想到以下定律: 奇数+偶数=奇数; 奇数+奇数=偶数; 偶数+偶数=偶数; 所以偶数可以忽略不计,只有奇数可以对结果产生影响, 所以我们只要注意奇数即可。 经过思考可得奇数的个数至少为 $k$ 个且比 $k$ 多的个数为偶数,此时多出的奇数可组成偶数,对结果不产生影 阅读全文
摘要:
【问题分析】 方法一:排序后从小到大排查,因为同色的数必须要是此色中最小数的倍数,又因为小的数不可能是大的数的倍数,所以从小开始算,把后面它的倍数都标记掉。记颜色的数量。 方法二:因为数的最大小于等于 $100$ ,所以可以用桶排来写,把所有数分别装入相应的桶中后,从桶 $1$ 开始到桶 $100$ 阅读全文
摘要:
【问题分析】 本题中只能相加,所以大于2048的数都没用,这使得本题有用的数据最大为2048, 所以可用桶排也是理所当然啦!用桶把小于等于2048的数都装进桶中从桶1开始把可以相加的数都进上去,直到1024,因为1024是相加小于等于2048中的最大数。 【设计程序】 #include<bits/s 阅读全文
摘要:
【问题分析】 因为要求和是奇数,所以可以想到想到以下定律: $1+0\equiv1(\bmod2)$ $1+1\equiv0(\bmod2)$ $0+0\equiv0(\bmod2)$ 所以不管什么数加上偶数,它的奇偶性都不会改变。 因此我们发现偶数只有凑数量的作用,只有奇数可以对结果的奇偶性产生影 阅读全文
摘要:
【问题分析】 此题题目意思每次取左或右的零食。 按区间dp的惯例,要区间从小到大dp。 上代码。 【Code】 #include<bits/stdc++.h> using namespace std; const int N = 2000 + 5; int f[N][N], a[N]; //f[i] 阅读全文
摘要:
有两种方法,代码注释都很详细了直接上代码 一:记忆化搜索 #include<bits/stdc++.h> using namespace std; int t[15]; int n, m; int a[400]; int mp[45][45][45][45];//mp[i][j][k][l]表示1号 阅读全文