目录
P9231 [蓝桥杯 2023 省 A] 平方差
考点:找规律
详解(不理解)
P8697 [蓝桥杯 2019 国 C] 最长子序列
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
//直接模拟整个过程即可
string s,t;
cin>>s>>t;
int cnt=0;
for(int i=0;i<s.size();i++)
if(s[i]==t[cnt])
cnt++;
cout<<cnt<<endl;
return 0;
}
P9230 [蓝桥杯 2023 省 A] 填空问题
题目A 答案:4430091
#include<iostream>
#include<cstring>
using namespace std;
int check(string s)
{
int ans1=0,ans2=0;
for(int i=0;i<s.size();i++)
{
if(i<s.size()/2)
ans1+=s[i]-'0';
else
ans2+=s[i]-'0';
}
return ans1==ans2;
}
int main()
{
int n=1e8;
int ans=0;
for(int i=11;i<1e8;i++)
{
string s=to_string(i);
if(s.size()%2==0)
if(check(s))
ans++;
}
cout<<ans<<endl;
return 0;
}
题目B 大佬详解
方法1:用dfs搜索
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int ans=0;
void dfs(int score,int cnt)
{
if(cnt>30||score==100)//结束条件
return ;
if(score==70)//记录种类次数 答案:8335366
ans++;
//右另一种答案:if(score==70&&cnt==30) 答案:4165637(洛谷答案)
//但是我觉得是第一种,因为题目说小蓝能任意结束答题
//有两种情况,1是答对了加10,2是打错了归0
dfs(score+10,cnt+1);
dfs(0,cnt+1);
}
int main()
{
//分数,答题数
dfs(0,0);
cout<<ans<<endl;
return 0;
}
方法2:动态规划
动态规划四要素:
1.f[i,j]表示什么
2.状态转移
3.初始
4.递推
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int f[40][110];
//int ans1,ans2;
int main()
{
f[0][0]=1;//0道题0分有1种情况
for(int i=1;i<=30;i++)//遍历题目
for(int j=0;j<=100;j+10)
{
if(j<90)//答对 ,小于90是当j=100时会越界
//不能j<=90,因为当j=90时100的方案就会有很多种
//但是题目要求是得了100分就会终止,则不需要再加上之前的情况去讨论
// 而且当j=100时会影响后面的计算
f[i][j+10]+=f[i-1][j];
f[i][0]+=f[i-1][j];//答错
}
int ans1=f[30][70];
cout<<ans1<<endl;
int ans2=0;
for(int i=1;i<=30;i++)
ans2+=f[i][70];
cout<<ans2<<endl;
return 0;
}