P8707 [蓝桥杯 2020 省 AB1] 走方格
思路:很典型的动态规划问题,对于偶数格特判,其他的正常遍历一遍,现在所处的格子的方案数等于左边的格子的方案数加上上面格子的方案数之和
cpp
#include <iostream>
using namespace std;
int n,m;
int f[40][40];
int main()
{
cin>>n>>m;
f[0][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i%2==0&&j%2==0) continue;
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
cout<<f[n][m];
return 0;
}
P8627 [蓝桥杯 2015 省 A] 饮料换购
思路:先cum暂时记录本次可以保留下来的瓶盖,然后用n记录本次共有多少瓶饮料,最后更新surplus
cpp
#include <iostream>
using namespace std;
int n,sum,surplus;
int cum;
int main()
{
cin>>n;
while(n)
{
sum+=n;
cum=(n+surplus)%3;
n=(n+surplus)/3;
surplus=cum;
}
cout<<sum<<endl;
return 0;
}
P8700 [蓝桥杯 2019 国 B] 解谜游戏
思路:注意到内中外圈数量比是1:2:3,所以无论怎么旋转在内圈的一个位置都对应着中圈的两个位置以及外圈的三个位置,如下图标黑的模块,由于操作三的存在着六根塑料棒可以相互交换位置,所以只要六根塑料棒里面有三根绿色的,两根红色的,一根黄色的就符合题目的要求,因此遍历四次找出这四个集合看是否都符合上述条件,只要有一个不符合就直接输出NO
cpp
#include <iostream>
#include <cstring>
using namespace std;
int t,flag;
string s1,s2,s3;
int q[1001];
int main()
{
cin>>t;
for(int i=0;i<t;i++)
{
cin>>s1>>s2>>s3;
for(int i=0;i<4;i++)
{
q[s3[i]]++,q[s2[i]]++,q[s2[i+4]]++,q[s1[i]]++,q[s1[i+4]]++,q[s1[i+8]]++;
if(q['R']!=2||q['Y']!=1||q['G']!=3)
{
cout<<"NO"<<endl;
flag=1;
memset(q,0,sizeof q);
break;
}
memset(q,0,sizeof q);
}
if(!flag) cout<<"YES"<<endl;
flag=0;
}
return 0;
}