动态规划
一只蓝色小鲨鱼
并不是我们主动选择辛苦和努力,而是别无选择!!!
一枚25考研,考公人。加油加油!!!
展开
-
P9230 [蓝桥杯 2023 省 A] 填空问题--2024蓝桥杯冲刺省一
思路:直接暴力枚举即可,因为可以在本地跑,没有限时:答案为:4430091。1.f(i,j)表示前 i 题得分为 j 的方案。3.初始化,根据定义 f(0,0)=1。2.状态转移方程,分答对了和答错了。原创 2024-02-13 14:41:38 · 945 阅读 · 2 评论 -
P8742 [蓝桥杯 2021 省 AB] 砝码称重--2024蓝桥杯冲刺省一
建议使用bitset优化来做,因为比较简介,而且易懂,当然也可以用01背包来做。原创 2024-02-12 22:33:25 · 392 阅读 · 0 评论 -
P2347 [NOIP1996 提高组] 砝码称重(bitset优化dp,bitset用法)--2024冲刺蓝桥杯省一
2.状态转移,看成 01 背包,如果f(i)可以表示,那么f(i+a[i])也可以表示,所以为f(i+a[i])=f(i);1.定义数组,f(k)表示前 i 个砝码,重量的组合是否可以为 k ,思路:将多重背包转化为01背包,因为数据比较小,所以不用二进制优化。3.初始化:根据定义来初始化f(0)=1。原创 2024-02-12 21:28:44 · 508 阅读 · 0 评论 -
完全背包详解--模板
为什么从前往后枚举呢,因为与01背包反过来,要保证是当前 i 层更新的,而不是第 i-1 层更新过来的。为什么完全背包变成了 i 呢,因为 每个物品都是可以随便选的,不像01背包只能选一次。1.01背包和完全背包核心代码其实只有一句不同(注意下标)原创 2024-02-12 20:31:34 · 396 阅读 · 0 评论 -
01背包详解--模板
例如,一维状态第 i 轮对体积为 3 的物品进行决策,则f[7]由f[7-3]更新而来,这里的f[4]正确应该是f[i - 1][4],但从小到大枚举到7 的时候 f[4] 在第i轮计算却变成了 f[i][4]。(1)当前背包容量不够:(j < v[i]),没得选,因此前 i个物品最优解即为前 i−1 个物品的最优解:f(i,j)=f(i-1,j)选:f(i,j)=f(i-1,j-v[i])+w[i];2.状态转移:f(i,j)可以由什么转移过来,不选:f(i,j)=f(i-1,j);原创 2024-02-12 20:17:23 · 750 阅读 · 0 评论 -
P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数--2024冲刺蓝桥杯省一
1.f [i] 表示当前字符串 以 2023 为第 i 位的数量方案:如f [0] 表示 前i个字符串中2 的数量, f [1] 表示 前i个字符串中 20 的数量, f [2] 表示 前i个字符串中202 的数量, f [3] 表示 前i个字符串中 2023 的数量.双字数思路:枚举即可,线性筛法,因为最大为2e14次方,所以筛出1e7的素数即可,时间为0.1秒左右。子2023思路:dp。最开始想着枚举,但是超时,想着优化以下,但是还是不行。原创 2024-02-05 12:17:56 · 2033 阅读 · 0 评论 -
KY8 整数拆分--方案dp(考研复试上机题)
i为偶数的时候: 当拆分的时候有奇数和没有奇数分别表示为 f[i-1] 和 f[i/2] ,1.定义数组:f[i]表示的为和为i的不同拆分种数(拆分的数必须为2的k次方)拆分为奇数好理解,就是多了一个1,把它去掉就是上一个奇数(i-1)的方案数,此时我们发现 2 和 3的方案数一样,便给了我们思路:按照i的奇偶性讨论。拆分为偶数的时候都是2的倍数,所以方案数就是f[i/2].所有转移方程就是 f[i]=f[i-1]+f[i/2];i为奇数的时候: f[i]= f[i-1]原创 2024-02-02 15:48:05 · 277 阅读 · 0 评论 -
动态规划——方案dp(考研复试上机知识点)
题型:有多少种方案。枚举大多数情况下不行,搜索通常也不行,但是可能会成功。所以我们这个时候考虑动态规划。原创 2024-02-02 15:27:22 · 356 阅读 · 0 评论 -
牛客练习赛100B题;
qq原创 2022-06-11 15:38:11 · 221 阅读 · 0 评论 -
【无标题】CF1673C Palindrome Basis(完全背包dp,回文数,预处理)
题目链接:https://codeforces.com/problemset/problem/1673/C#include <iostream> //常用开头模板,保存在文档,下次直接用 #include <algorithm>#include <cstring>#define sx first#define sy secondusing namespace std;typedef long long LL;typedef...原创 2022-05-08 14:20:14 · 359 阅读 · 0 评论 -
洛谷 P1802 5 倍经验日(01)背包(状态转移)
//01背包两个坑;// 结果*5后爆int,//状态转移://1、能嗑药打败当前敌人,那就嗑药和不嗑药两种情况比较 //f[i]=max(f[i]+输的经验值,f[i-嗑药数量]+赢的经验值)//2、药不够,那就加上输的经验值 f[i]=f[i]+输的经验值#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N...原创 2022-05-06 11:49:31 · 311 阅读 · 0 评论 -
【无标题】洛谷P1616 疯狂的采药(dp)(滚动数组)
//注意范围//f数组为价值范围;所以为1e7+10;//而 t=1;价值1e4时 组数为1e7爆int;开longlong#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=10100,M=1e7+10;long long n;long long m;long long f[M];int main(...原创 2022-05-05 16:58:27 · 83 阅读 · 0 评论 -
【无标题】洛谷P1434 [SHOI2002]滑雪(记忆化搜索)
#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=110;int n,m;int g[N][N];bool st[N][N];int dx[]={1,-1,0,0};int dy[]={0,0,-1,1};int dfs(int x,int y){ int cnt=1; for(int i=0;i&...原创 2022-05-05 12:06:58 · 928 阅读 · 0 评论 -
AcWing 1057. 股票买卖 IV(dp状态机)(状态机的理解)
给定一个长度为N的数组,数组中的第i个数字表示一个给定股票在第ii天的价格。设计一个算法来计算你所能获取的最大利润,你最多可以完成k笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。输入格式第一行包含整数N和k,表示数组的长度以及你可以完成的最大交易数量。第二行包含N个不超过10000的正整数,表示完整的数组。输出格式输出一个整数,表示最大利润。数据范围1≤N≤105,1≤k≤100输入...原创 2022-05-07 16:17:38 · 174 阅读 · 0 评论 -
洛谷 P1002 [NOIP2002 普及组] 过河卒(线性dp)
//状态表示 f[i][j]表示 走到(i,j)的集合;// 属性:方案数;// 计算 f[i-1][j]+f[i][j-1];//坑点: 爆int ,而且范围还不会计算,一遍遍试,积累经验;// 有 f[i-1][j],f[i][[j-1]; 题目从(0,0)开始// 会数组越界; //马本身也不能走; //巧妙:有马可到的地方 f[i][j]置为0;退出,不更新; #include <iostream>#inclu...原创 2022-05-06 13:05:55 · 235 阅读 · 0 评论