
PAT/蓝桥/洛谷刷题存档
非/典/型题解
给雨
这个作者很懒,什么都没留下…
展开
-
P1060 [NOIP2006 普及组] 开心的金明
P1060 [NOIP2006 普及组] 开心的金明状态f[i][j]表示前i件物品使用j元可以得到的物品价格c[i] * 物品重要度w[i]最大值,f[m][n]即本题的解求f[i][j]:如果不购买第i件物品,f[i][j] = f[i - 1][j]如果购买第i件物品,f[i][j] = f[i - 1][j - c[i]] + c[i] * w[i]边界条件:f[i][j] = 0 (i == 0 || j == 0)#include<bits/stdc++.h>us原创 2021-03-23 15:37:36 · 170 阅读 · 0 评论 -
P1164 小A点菜
P1164 小A点菜状态f[i][j]为吃前i种菜,恰花j元的方案数,自然f[N][M]就是我们要求的结果若第i种菜恰可以买(j > c[i]),问题转换为前i - 1种菜恰花j - c[i]元的方案数和前i - 1种种菜恰花j元方案数之和,即f[i][j] = f[i - 1][j - c[i]] + f[i - 1][j]若只能买第i种菜,即j == c[i],f[i][j] = f[i - 1][j] + 1若第i种菜不可买(j < c[i]),问题转换为前i - 1种菜恰花j元原创 2021-03-22 19:54:13 · 210 阅读 · 0 评论 -
P1049 [NOIP2001 普及组] 装箱问题
P1049 [NOIP2001 普及组] 装箱问题01背包简化版,这里的w[i]就等价于c[i],稍作修改即可#include <bits/stdc++.h>using namespace::std;int V, N;int f[20005], c[35];void ZeroOnePack(){ for(int i = 0; i <= V; ++i) f[i] = 0; for(int i = 1; i <= N; ++i)原创 2021-03-21 18:32:45 · 350 阅读 · 0 评论 -
P1048 [NOIP2005 普及组] 采药
P1048 [NOIP2005 普及组] 采药题目#include <bits/stdc++.h>using namespace std;int f[1005], c[105], w[105], N, V;void ZeroOnePack(){ for(int i = 0; i <= N; ++i) f[i] = 0; for(int i = 1; i <= N; ++i) for(int v = V; c[i] <=原创 2021-03-21 17:02:52 · 384 阅读 · 0 评论 -
蓝桥训练系统-基础训练-非VIP题
蓝桥训练系统-基础训练-非VIP题数列排列#include <bits/stdc++.h>using namespace::std;int a[205];int main(){ int n; cin >> n; for(int i = 1; i <= n; ++i) cin >> a[i]; sort(a + 1, a + n + 1); for(int i = 1; i <= n - 1;原创 2021-03-11 23:09:30 · 191 阅读 · 0 评论 -
P1121环状最大两段子段和
P1121环状最大两段子段和题目假定一个小白看这道题,一步步了解相关知识最大子段和(DP,O(n))状态dp[i]表示以A[i]作结尾的最大连续子序列和,求出dp数组的最大值即题解dp[1] = a[1]; //边界条件for(int i = 2; i <= n; ++i){ dp[i] = max(dp[i - 1] + a[i], a[i]); //状态转移方程}sort(dp + 1, dp + n + 1); //找到dp数组的最大值ans1 = dp[n];原创 2021-03-08 12:57:06 · 1417 阅读 · 0 评论 -
PAT甲级练习1045 Favorite Color Stripe (30 point(s)) dp解LIS
PAT甲级1045题目题意第一行给定一个n表示总颜色数,颜色种类用1 ~ n数字表示第二行第一个数是Eva喜欢的颜色数m,后面m个数代表Eva喜欢的颜色序列第三行第一个数是彩带的长度L,后面L个数代表彩带上的颜色序列我们要做的就是找出在彩带上符合Eva喜欢的颜色序列(符合顺序即可,可以缺少)的最大长度,例如Eva喜欢的颜色序列是{2, 3, 1, 5, 6},彩带序列是{2, 2, 4, 1, 5, 5, 6, 3, 1, 1, 5, 6},输出就是7思路(LIS)为了符合LIS的思路,我原创 2021-03-07 09:32:10 · 229 阅读 · 0 评论 -
PAT甲级练习1007 Maximum Subsequence Sum最大连续子序列和 (25 point(s))
题目题解个人见解#include <bits/stdc++.h>using namespace ::std;const int maxn = 10005;int dp[maxn], a[maxn];int main(){ int n; cin >> n; for(int i = 1; i <= n; ++i) //读入 cin >> a[i]; dp[1] = a[1]; //边界值 i原创 2021-03-01 08:52:18 · 211 阅读 · 0 评论