uva 1637 Double Patience

本文介绍了一款基于36张牌的游戏,游戏目标是通过匹配相同点数的牌来移除牌堆,最终清空所有牌堆即为胜利。文章提供了一个C++程序,用于计算在随机选择匹配的情况下游戏成功的概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://vjudge.net/problem/UVA-1637

 

36张牌分成9堆,每堆4张牌。每次可以拿走某两堆顶部的牌,但需要点数相同。

如果有多种拿法则等概率的随机拿。

如果最后拿完所有牌则游戏成功。按顺序给出每堆牌的4张牌,求成功概率。

 

#include<cstdio>
using namespace std;
char s[10][5];
char ss[5];
int left[10];
int v[2000001];
double dp[2000001];
int t;
int state()
{
    int tmp=0;
    for(int i=1;i<=9;i++) tmp=tmp*5+left[i];
    return tmp;  
}
double solve()
{
    int x=state();
    if(!x) return 1.0;
    if(v[x]==t) return dp[x];
    double ans=0; int cnt=0;
    for(int i=1;i<9;i++)
     for(int j=i+1;j<=9;j++) 
      if(left[i]&&left[j]&&s[i][left[i]]==s[j][left[j]])
      {
           left[i]--; left[j]--;
          ans+=solve();
          cnt++;
          left[i]++; left[j]++;
      }
    if(cnt) dp[x]=1.0*ans/cnt;
    else dp[x]=0;
    v[x]=t;
    return dp[x];
}
int main()
{
    while(scanf("%s",ss)!=EOF)
    {
        s[1][1]=ss[0];
        for(int j=2;j<=4;j++) 
        {
            scanf("%s",ss);
            s[1][j]=ss[0];
        }
        for(int i=2;i<=9;i++)
         for(int j=1;j<=4;j++)
          {
              scanf("%s",ss);
              s[i][j]=ss[0];
          }
        t++;
        for(int i=1;i<=9;i++) left[i]=4;
        printf("%.6lf\n",solve());
    }
}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/6938107.html

### ReduceLROnPlateau 中 patience 参数的作用 `ReduceLROnPlateau` 是一种动态调整学习率的方法,其核心思想是在训练过程中监控某个指标(通常是验证集损失),当该指标在一定次数的迭代中未见改善时,降低学习率以促进模型收敛。其中 `patience` 参数定义了允许指标不改进的最大等待轮数。 具体来说,在每次调用 `step()` 方法时,`ReduceLROnPlateau` 会检查指定的监控指标是否有提升。如果没有提升,则增加计数器;如果连续达到 `patience` 轮次仍未观察到任何改进,则触发学习率下降机制[^1]。这种设计有助于防止因短期波动而导致过早的学习率衰减。 以下是实现的一个简化版本代码示例: ```python from torch.optim.lr_scheduler import ReduceLROnPlateau optimizer = ... # 定义优化器 scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10) for epoch in range(num_epochs): train(...) val_loss = validate(...) # 验证阶段计算损失 scheduler.step(val_loss) # 更新调度器状态 ``` 在此代码片段中,`patience=10` 表明即使验证损失持续上升或保持不变,也会容忍最多 10 个周期后再决定是否减少学习率[^2]。 值得注意的是,除了 `patience` 外还有其他重要参数影响行为模式,比如 `factor` 控制每次削减的比例以及 `threshold` 设定判定显著变化的标准等。这些超参共同决定了整个自适应策略的表现效果。 #### 关于多任务场景下的应用注意事项 在多任务学习框架下运用此类方法需额外谨慎考虑各子任务间可能存在的相互干扰现象。由于不同任务往往具有各自独立的最佳更新频率或者节奏安排需求,因此简单统一设置全局性的 `patience` 值未必总是最优解法[^3]。 最后提到一点关于硬件层面性能考量方面的小技巧——对于涉及大量数据搬运操作的应用场合而言,合理配置内存拷贝函数如DPDK中的memcpy可以有效缓解瓶颈状况从而间接加速整体流程进展速度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值