洛谷带刷100题(T1-T5)
洛谷带刷100题(T1-T5)
2025.03.17
T1 过河卒
题目简介:有障碍的动规
dp数组含义
dp[i][j]表示到第i行第j列有多种路径
状态转移方程
dp[i][j]=dp[i-1][j]+dp[i][j-1]
常见的路径问题,当前一步的结果只跟左边和上边有关
一些技巧
1.在一个坐标向各个方向都可以走时,可以定义表方向的数组dx[4],dy[4]再用for循环中nx=x+dx[i]实现,记得判断边界条件
2.坐标移动,从00移动到11比较方便操作,甚至还省去了初始化的操作
错题过程
1.初始化着重看一下
2.map地图标记能不能走,比较方便
基础的dp题目
T2 铺地毯
题目简介:结构体实现的模拟
一些技巧
struct node{
int x1,y1,x2,y2;
}d[N];
装着结构体的数组,这种写法已经定义好了,typedef的是起别名
int a,b,g,k;cin>>a>>b>>g>>k;
d[i]={a,b,g,k};
简单快捷的结构体输入
注意点
铺地毯后来铺的在上面,符合常理的操作是倒序遍历
就这样
T3 三连击
题目简介:模拟+验证(偏暴力)找使用1-9构成的1比2比3的仨数
一些技巧
1.先估计循环范围,123-329就够用,再遍历判断
2.验证函数
bool isok(int a,int b,int c){
set<int>st;
while(a)st.insert(a%10),a/=10;
while(b)st.insert(b%10),b/=10;
while(c)st.insert(c%10),c/=10;
for(auto&i:st)if(i==0)return false;
return st.size()==9;
}
贴在这里再熟悉一下
That’s all
ps:这题做的时候思路还是有点难想的
T4 数的计算
题目简介:动规吧
- 6
- 6,1
- 6,2
- 6,3
- 6,2,1
- 6,3,1
dp数组
\[dp[i]=\sum_{j=1}^{i-1}dp[j]
\]
for(int j = 1;j<=i/2;j++) dp[i]+=dp[j]
注意点
1.每次内循环结束后f[i]++,不要漏掉直接结束的这种情况
Erik的解法暂时没看懂,日后功力大涨回头再看
T5 最大公约数和最小公倍数问题
题目简介:数学 枚举
知识点补充
ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}
最大公约数的求法:辗转相除法
补充一个数学公式如下:
\[a×b=gcd(a,b)×lcm(a,b)
\]
因此得到最小公倍数的求法
ll lcm(ll a,ll b){ return a*b/gcd(a,b);}
思路
有了上述知识,这道题已经解决一大部分了,剩下的就是从x到y枚举对应的结果,再验证判断