- 博客园支持Markdown评论了!主题已经抢先修复样式
- 主题已经升级至V2.0.9,点击查看
- 武汉加油 🇨🇳 中国加油!
- 全国疫情趋势AI预测
- 武汉光谷周边小区疫情地图
02 2023 档案
摘要:题意 大意是求 思路 n项平方和求法: 1 + 4 + 9 + 16 + .... + = 1 * 1 + 2 * 2 + 3 * 3 + ... + n * n = (1 + 2 + 3 + ... + n) + (1 * 2 + 2 * 3 + ... + (n - 1) * n)
阅读全文
摘要:状态机 解析 状态机按现在的认识,可以看做一种观察问题的思路 将不同的状态看做“点”,状态之前可以转化的情况看做“边” 由此某个问题就可以变成由点和边组成的“过程” 然后根据过程来编写代码,在某些问题的理解上会更加清晰 练习 1049. 大盗阿福 思路 将选第i家店铺作为状态1,不选作为状态0。 由
阅读全文
摘要:11. 背包问题求方案数 思路 求最优方案数可以分成两步 第一步求出最优方案,也就是最大价值 第二部求最大价值下的方案数具体有多少种 而求出当前i,j下最大价值,然后求出相应的方案数即可一步步递推出最终结果 集合划分: 当前最大价值f[i, j]若是等于f[i - 1, j],那么相应方案一定从它转
阅读全文
摘要:1021. 货币系统 思路 完全背包求方案数,与01背包类似 #include <iostream> using namespace std; int n, m; const int N = 20, M = 3010; long long f[M]; int main() { cin >> n >>
阅读全文
摘要:12. 背包问题求具体方案 思路 背包问题求具体方案类似于求最短路径问题 对于求具体方案来说,可以由最后的最大价值逆推 原因是:01背包问题的集合划分就是依靠第i个物品选不选 若选择当前物品,那么当前价值一定是由上一级的f[i - 1][j],或者f[i - 1][j - v[i]] + w[i]转
阅读全文
摘要:A - Yet Another Promotion 题意 给出需要买的物品总个数n,第一天购买物品是a元,第二天购买是b元,且若在第一天购买物品会有优惠:每买m个物品,送一个物品,也就是说在第一天花m个物品的钱可以买m+1个物品 问最少花多少钱可以买至少n个物品 思路 第一步:判断是否使用优惠 若是
阅读全文
摘要:1020. 潜水员 #include <iostream> #include <cstring> using namespace std; const int N = 22, M = 80; int f[N][M]; int n, m, k; int main() { cin >> n >> m >
阅读全文
摘要:思路 使用二分找到该数处在哪个完整周期中,然后通过确定该周期的区间l, r,可以找到该数的答案 推导 首先我们需要找到每个周期开始位置的关系,如2 7 19 .... 一看上去没什么规律,看他们的差值可以发现其实是个一个等差数列1 5 9 .... 那么可以通过等差数列求和来确定每个周期的开始位置,
阅读全文
摘要:01背包 思路 dp分析法: 1.状态划分: (1) 判断是个什么集合? 01背包问题是所有选法的集合 集合的限制条件是什么? 01背包问题是在前i个物品中选取总体积不超过j的物品 (2) 集合的属性是什么?(属性一般有:最大值,最小值,数量) 01背包问题的属性是求最大值 2.状态划分: 集合划分
阅读全文
摘要:A - One and Two 题意 给出长度为n的序列a,a中元素是1或2 找到一个最小的k使a1 * a2 * a3 * .... * ak = ak+1 * ak+2 * ak+3 * ... * an 思路 统计序列中有多少个2,若是奇数个2,则不可能,若是0个,则是第一个,否则设2的数量为
阅读全文
摘要:A1 - Non-alternating Deck (easy version) 题意 给出一个数字n,两个人轮流玩游戏从n中拿数,第一个人首先拿1,第二个人拿2,3,第一个人拿1...循环往复,直到数字全被拿完 思路 模拟即可 void solve() { int n; cin >> n; n -
阅读全文
摘要:最长上升子序列问题有两种解决方法 1.做法 思路 状态表示————集合:f[i]表示从1到i中上升子序列的集合 状态计算————从最后开始分析,因为最后一步一定是加上它自己,所以从前面的上升子序列中找到最长的上升子序列加上自己,就一定也是最长的。 思考 数字三角形模型中,从最后分析,划分集
阅读全文
摘要:记录一下第一次可以写到G1,只剩一道题就可以ak,虽然是div4,不过也值得开心一下。 A - Codeforces Checking void solve() { char c; cin >> c; string s = "codeforces"; bool flag = 0; for (auto
阅读全文
摘要:闫氏dp法与传统dp的区别是————从集合角度考虑dp问题 dp问题 一、状态表示(f[i][j]) (1)集合 明确f[i][j]表示的是什么集合 如:数字三角形模型中f[i][j]表示的是从(1,1)到(i,j)所有路径的最(大/小)值 (2)属性 明确f[i][j]需要求的是什么东西,基本分为
阅读全文
摘要:AcWing 1015. 摘花生 理解 属于数字三角形问题中最简单的一种,即给出矩阵然后计算从起始点到最终点(最大/最小)价值 此题是计算最大值,只需把f数组初始化为0,然后根据最后一步是由上面的格子和左边的格子得来的得到状态计算方程,即可得出 #include <iostream> #includ
阅读全文
摘要:A - Flip Flop Sum 题意 给出长度为n的序列a,a中只包括1和-1,你必须操作一次,让相邻两个元素由1变-1或由-1变1,问操作后数组总和最大多少 思路 暴力即可 void solve() { int n; cin >> n; vector<int> a(n + 1); int su
阅读全文
摘要:A - Greatest Convex 题意 给出k,要找出最大的x(1 <= x <= k),使x! + (x - 1)! 是k的倍数,问是否存在,为多少 思路 变换一下即可得原式为(x - 1)!(x + 1),若要满足条件,令x = k - 1即可 void solve() { int n;
阅读全文