摘要:
12. 背包问题求具体方案 思路 背包问题求具体方案类似于求最短路径问题 对于求具体方案来说,可以由最后的最大价值逆推 原因是:01背包问题的集合划分就是依靠第i个物品选不选 若选择当前物品,那么当前价值一定是由上一级的f[i - 1][j],或者f[i - 1][j - v[i]] + w[i]转 阅读全文
- 博客园支持Markdown评论了!主题已经抢先修复样式
- 主题已经升级至V2.0.9,点击查看
- 武汉加油 🇨🇳 中国加油!
- 全国疫情趋势AI预测
- 武汉光谷周边小区疫情地图
摘要:
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]需要求的是什么东西,基本分为 阅读全文