5 条题解
-
27
&地砖&
参考代码
#include<cstdio> #define x 12345 using namespace std; int f[1005] = {0,1,3},n; int main() { scanf("%d",&n); for(int i = 3;i <= n;i++) f[i] = (f[i-1] + f[i-2] * 2 % x) % x; printf("%d",f[n]); return 0; }
思路 and 分析
-状态定义
定义 f[i]为铺i*3个数的方案数。-初始状态
f[1]为铺1∗3个数的方案数,只能全用1∗1,所以f[1]=1。f[2]为取2∗3个数的方案数,枚举可知有4种,所以f[2]=3。点赞再抱走~
hetao8554411
20230804 -
10
思路
$\\$($1$)状态定义: $\\$定义$f[i]$为铺$i*3$个数的方案数。 $\\$($2$)初始状态: $\\$$f[1]$为铺$1*3$个数的方案数,只能全用$1*1$,所以$f[1]=1$。 $\\$$f[2]$为取$2*3$个数的方案数,枚举可知有$4$种,所以$f[2]=3$。 $\\$($3$)状态转移方程: $\\$对于$f[i]$而言考虑最后一行用不用$2*2$。 $\\$如果不用,全用$1*1$,前面$i-1$行的方案数为$f[i-1]$. $\\$如果用,那么会伸到$i-1$,且有$2$个位置可以选择,前面$i-1$行的方案数为$f[i-2]$. $\\$所以状态转移方程为:$f[i]=f[i-1]+2*f[i-2];$代码
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> using namespace std; int f[1005],n; int main() { cin>>n; f[1]=1;f[2]=3; for(int i=3;i<=n;i++) { f[i]=(f[i-1]+f[i-2]*2%12345)%12345; } cout<<f[n]; return 0; }
-
2
致不想用草稿纸的:
#include <iostream> #include <algorithm> #include <cmath> using namespace std; // const int MOD=12345; const long long MAXN=24242424; int n; int f[MAXN];//fi代表铺i*3方案数 // int main() { cin>>n; f[1]=1; f[2]=3; for (int i=3;i<=n;i++) f[i]=(f[i-2] * 2 % MOD + f[i-1]) % MOD; cout<<f[n]; return 0; }
咱们在取模方面也是拿捏的ss的😇😇😇
-
-1
感谢老师
#include <bits/stdc++.h>//这你们懂 //1 using namespace std; //1 int f[1005],n;//开数组,变量 //1 int main() //1 { //1 cin>>n; //1 f[1]=1; //1 f[2]=3;//你们都懂 //1 while(1) cout<<"你居然抄题解!!!"; for(int i=3;i<=n;i++) f[i]=(f[i-1]+f[i-2]*2%12345)%12345;//递推 //1 cout<<f[n];//输出 //1 return 0; //1 } //1
- 1
信息
- ID
- 263
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 1000
- 已通过
- 443
- 上传者