大家好 我是寸铁💪
考前需要刷大量真题,大家一起相互监督,每日做N题,一起上岸吧✌️ ~
冲刺蓝桥杯省一模板大全来啦 💥 ~
蓝桥杯4月8号就要开始了 🙏 ~
还没背熟模板的伙伴们背起来 💪 💪 💪
祝大家4月8号蓝桥杯上岸 ☀️ ~
不清楚蓝桥杯考什么的点点下方👇
考点秘籍
想背纯享模版的伙伴们点点下方👇
蓝桥杯省一你一定不能错过的模板大全(第一期)
蓝桥杯省一你一定不能错过的模板大全(第二期)
想背注释模版的伙伴们点点下方👇
蓝桥杯必背第一期
蓝桥杯必背第二期
往期精彩回顾
蓝桥杯上岸每日N题 第一期(一)!!!
蓝桥杯上岸每日N题第一期(二)!!!
蓝桥杯上岸每日N题第一期(三)!!!
蓝桥杯上岸每日N题第二期(一)!!!
操作系统期末题库 第九期(完结)
LeetCode Hot100 刷题(第三期)
idea创建SpringBoot项目报错解决方案
数据库SQL语句(期末冲刺)
想看JavaB组填空题的伙伴们点点下方 👇
填空题
考前需要刷大量真题,大家一起相互监督,每日做N题,一起上岸吧✌️ ~
第三期(一)
李白打酒加强版 ✨
初始化
酒最多是m
为什么?
如果大于m 走到最后的花时,酒不为0
,与题意冲突!!!
走到最后的花时,刚好酒用完了为 0。
而花最多为m ,所以酒最多是m。
状态表示:
f [ i ] [ j ] [ k ] 表示 i 个店, j 个花,酒壶还剩 k 斗酒 f[i][j][k]表示i个店,j个花,酒壶还剩k斗酒 f[i][j][k]表示i个店,j个花,酒壶还剩k斗酒
集合:一共遇到i个店、j朵花,且有k斗酒的所有方案的集合
属性:count
状态计算:
分为两种状态:要么最后是店、要么最后是花。
并且只会属于其中一种情况,划分的集合是不重不漏的。
(1)最后是店
最后的状态为f[i][j][k]
则前面走了i-1
个店、j
朵花、酒还剩k/2
。
每次走到店,会多2 倍,走到最后的店时酒为k
最后一次 走到店的k/2*2=k
所以是k/2
(k要能整除2)
方案数: f [ i − 1 ] [ j ] [ k / 2 ] ( i > = 1 , k / 2 ) 方案数:f[i-1][j][k/2] (i>=1,k/2) 方案数:f[i−1][j][k/2](i>=1,k/2)
(2)最后是花
最后的状态为f[i][j][k]
则前面走了i
个店,j-1
朵花,酒剩余k+1
。
为什么是k+1
?
需要反推一下,最后的状态一定是K
。
每次走到花,会减少1 ,走到最后的花时酒为k
。
所以是k+1
方案数: f [ i ] [ j − 1 ] [ k + 1 ] ( j > = 1 ) 方案数:f[i][j-1][k+1] (j>=1) 方案数:f[i][j−1][k+1](j>=1)
类似于数字三角形!!!
一类是从i走过来,一类是从j走过来。
注意
最后一站是花 ,走到最后一站前 酒还剩1
斗。
所以 最后的答案是
f [ n ] [ m − 1 ] [ 1 ] f[n][m-1][1] f[n][m−1][1]
Accode
java
import java.util.*;
public class Main{
static int mods=1000000007;
static int N=110;
static int f[][][]=new int[N][N][N];
public static void main(String []args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
f[0][0][2]=1;
for(int i=0;i<=n;i++){
//店数最多为n,i最多为n
for(int j=0;j<=m;j++){
//花数最多为m,j最多为m
for(int k=0;k<=m;k++){
//走到最后的花,酒最多为m。
//最后为店的方案数
if(i>=1&&k%2==0)f[i][j][k]+=f[i-1][j][k/2]%mods;
//最后为花的方案数
if(j>=1)f[i][j][k]+=f[i][j-1][k+1]%mods;
}
}
}
//倒推倒数第二个状态
//最后一站是花,走到最后一站前酒还剩1斗。
System.out.println(f[n][m-1][1]);
}
}
☀️☀️☀️☀️☀️☀️
后续有补充,持续更新中🌋
喜欢的伙伴点点赞,关个注💗