蓝桥杯——ALGO1007——印章

大佬,牛!!!

  • 题目:从n种印章中取m次,每次取到任意一种的概率是相同的。问m次能够去到所有种类的概率。
  • 说明:这个题用动态规划,但是我动态规划学习的一般,这里就参考了一下大佬的链接。也准备开始攻克一下动态规划。
  • 动态规划流程:首先我们明确几个东西,动态规划中一般是二维数组,然后遍历数组,通过前面的解,找到当前的解,一般是二维数组。最后一般返回数组的角落的值。当然数组还需要初始化。
  • 本题思路:
    • 变量:n表示种类,m表示次数,我们定义变量i表示局部的种类,j表示局部的次数。
    • 然后思考i,j位置的时候,我们拿到一个印章(第j次),这个印章有两种情况,第一种是跟之前重复了。第二种是没有重复。
      • 如果重复,那么重复的概率是多少?答:当前是i位置,表示而且我们拿到了i种,本次拿的是i种中的一个,所以概率是i/n。但是前提是,在没拿这一次的时候,就已经拿到了i种。所以这种出现的概率是j-1次时拿了i种,并且本次拿到重复的。
      • 如果不重复,那么不重复的概率时多少?答:当前位置时i,但是我们拿的是不重复的,所以之前有i-1种了,所以我们要从n-(i-1)种中拿出来,所以概率是(n-(i-1))/n。但是前提是,在j-1次的时候,拿到了i-1种。
      • 所以上面两种情况之和,就是最终的结果了。
  • 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T3002
import java.util.Scanner;

/**
* @创建人 xcs
* @创建日期 2022/3/14
* @创建时间 13:24
* 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T3002
*/
public class ALGO1007 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        if (m < n) {
            System.out.printf("%.4f", 0.0);
            return;
        }
        double map[][] = new double[n + 1][m + 1];
        // i是种类
        for (int i = 1; i <= n; i++) {
            // j是次数
            for (int j = 1; j <= m; j++) {
                if (i > j) {
                    // 次数比种类少
                    map[i][j] = 0;
                } else if (i == 1) {
                    // 第一行
                    map[i][j] = Math.pow(1.0 / n, j - 1);
                } else {
                    // 重复+不重复
                    map[i][j] = map[i][j - 1] * (i * 1.0 / n) + map[i - 1][j - 1] * (n - i + 1.0) / n;
                }
            }
        }
        System.out.printf("%.4f", map[n][m]);
    }
}
  • 总结:动态规划的题目思路确实比较难想,特别是递推公式,但愿做的多了能好一点。在此附上大佬的链接
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
贝叶斯优化算法是一种基于贝叶斯定理的优化算法,可以用于自动调参。其中,hyperopt是一个使用贝叶斯优化算法的Python包,可以帮助我们自动调整模型的超参数。 使用hyperopt,我们需要定义一个目标函数,这个函数输入超参数的值,输出模型的评分。然后,我们可以使用hyperopt的fmin函数来最小化这个目标函数,以找到最佳的超参数组合。 下面是一个使用hyperopt调参的示例代码: ```python from hyperopt import fmin, tpe, hp from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score # 定义目标函数 def objective(params): # 超参数 n_estimators = params['n_estimators'] max_depth = params['max_depth'] min_samples_split = params['min_samples_split'] # 定义模型 clf = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_split=min_samples_split) # 计算交叉验证得分 iris = load_iris() scores = cross_val_score(clf, iris.data, iris.target, cv=5) # 返回平均得分 return 1 - scores.mean() # 定义超参数搜索空间 space = { 'n_estimators': hp.choice('n_estimators', range(10, 1000)), 'max_depth': hp.choice('max_depth', range(1, 20)), 'min_samples_split': hp.choice('min_samples_split', range(2, 10)) } # 使用Tree-structured Parzen Estimator算法搜索最佳超参数 best = fmin(fn=objective, space=space, algo=tpe.suggest, max_evals=100) # 输出最佳超参数组合 print(best) ``` 在上面的代码中,我们定义了一个目标函数objective,它的输入是超参数的值,输出是模型的评分。然后,我们定义了超参数的搜索空间space,它包括n_estimators、max_depth和min_samples_split三个超参数。最后,我们使用Tree-structured Parzen Estimator算法搜索最佳超参数,最多进行100次迭代。 执行上述代码后,我们可以得到最佳的超参数组合,输出类似于{'max_depth': 4, 'min_samples_split': 8, 'n_estimators': 315}的结果。这个结果可以用于训练一个随机森林模型,并进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值