UVA 10471 Gift Exchanging

本文探讨了一个基于动态规划(DP)算法解决特定概率优化问题的实例。通过详细解析状态转移方程和算法流程,作者展示了如何确定在有限选项中选择最可能触发特定事件的策略,同时给出了关键的代码实现细节。该方法对于概率决策问题具有广泛的应用前景。

题意:就5种盒子,给出每个盒子个数,盒子总数,每个人选择这个盒子的概率。求这个人选择哪个盒子取得第一个朋友的概率最大,最大多少

dp[N][sta]表示当前第N个人面临状态sta(选择盒子的状态可以用13进制数表示)时的概率,

那么转移就是dp[N][sta]=sum(dp[N-1][sta-1]*G[n][k]) (表示第N个人选择第k个盒子)

那么答案应该是max(P(第1个人选择i号盒子)/总状态概率)(i<=5)

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
#define MAXN 350000
#define MAXD 15
#define MAXB 10
double p[MAXD][MAXB],dp[MAXD][MAXN];
bool vis[MAXD][MAXN];
int N,res[MAXB],gift[MAXB];
double calcu(int cur,int st)
{
    if (vis[cur][st]) return dp[cur][st];
    vis[cur][st]=true;
    double ans=0;
    int sta=st;
    for (int i=5;i>0;i--)  {res[i]=sta%13;sta/=13;}
    for (int i=1;i<=5;i++)
      if (res[i])
    {
        res[i]--;
        sta=0;
        for (int j=1;j<=5;j++) sta=sta*13+res[j];
        ans+=calcu(cur+1,sta)*p[cur][i];
        res[i]++;
    }
    return dp[cur][st]=ans;
}
int main()
{
    //freopen("sample.txt","r",stdin);
    int T;
    scanf("%d",&T);
    while (T--)
    {
        scanf("%d",&N);
        int sta=0;
        for (int i=1;i<=5;i++) { scanf("%d",&gift[i]);sta=sta*13+gift[i];}
        for (int i=1;i<=N;i++) for (int j=1;j<=5;j++) scanf("%lf",&p[i][j]);
        memset(vis,false,sizeof(vis));
        vis[N+1][0]=true;dp[N+1][0]=1;
        double tmp=calcu(1,sta);
        double ans=-1.0,sym;int ide;
        for (int i=1;i<=5;i++)
            if (gift[i])
        {
            gift[i]--;
            sta=0;
            for (int j=1;j<=5;j++) sta=sta*13+gift[j];
            gift[i]++;
            sym=dp[2][sta]*p[1][i]/gift[i];
            if (sym/tmp>ans)
            {
                ans=sym/tmp;
                ide=i;
            }
        }
        printf("%d %.3lf\n",ide,ans);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/Commence/p/3974714.html

<think>好的,用户遇到了HDFView登录时出现的错误“Error exchanging code”,并且错误代码未知。首先,我需要了解HDFView是什么,以及它的常见使用场景。HDFView是用于查看和管理HDF(Hierarchical Data Format)文件的工具,通常用于科学数据存储。用户提到的是登录错误,可能涉及到网络认证或代理设置的问题。 接下来,我需要考虑可能的错误原因。用户提到错误代码未知,所以需要覆盖常见可能性。首先,检查网络连接是否正常,因为HDFView可能需要连接到服务器进行认证,尤其是如果用户在使用某些需要登录的云服务或数据库。其次,代理设置可能阻止了HDFView的正常连接,特别是如果用户在公司或学校网络,可能需要配置代理。 另外,HDFView的版本过旧也可能导致兼容性问题,建议用户更新到最新版本。防火墙或安全软件有时会拦截应用程序的网络请求,需要检查是否有相关设置阻止了HDFView。还有Java环境的问题,因为HDFView是基于Java开发的,确保Java版本兼容且正确安装也很重要。 用户可能尝试过登录但失败,但未提供具体操作步骤,所以需要列出详细的排查步骤。例如,先测试网络连接,然后检查代理设置,更新软件,检查防火墙等。同时,需要指导用户如何找到日志文件,以获取更详细的错误信息,这对于进一步诊断问题很有帮助。 此外,引用中的错误信息关于DDLERROR可能与当前问题无关,但需要确认用户是否混淆了不同的错误来源,或者是否有其他配置问题。需要提醒用户如果问题持续,联系HDFGroup支持团队,并提供必要的信息。 最后,生成相关问题,帮助用户扩展解决其他可能的问题,比如HDFView打开文件错误、代理配置、日志查看方法等,这样可以全面覆盖用户可能遇到的后续问题。</think>针对HDFView登录时出现的"Error exchanging code"错误,请按照以下步骤排查: ### 1. 网络连接验证 - 检查网络是否可达HDF服务器:使用`ping hdfgroup.org`或`telnet hdfgroup.org 80`验证基础网络连接 - 测试HTTPS访问:在浏览器打开`https://www.hdfgroup.org`确认证书有效性 - 注意:HDF5云服务需要TLS 1.2+支持[^1] ### 2. 代理配置排查 ```bash # 查看系统代理设置 echo $http_proxy echo $https_proxy # 临时禁用代理测试 unset http_proxy https_proxy ``` ### 3. 软件版本验证 - 最新版本下载:访问[HDFView Releases](https://www.hdfgroup.org/downloads/hdfview/) - 版本要求:推荐3.3.3+(2023年后版本已修复多个认证问题) ### 4. 证书配置 Java运行环境需包含有效证书链: ```bash # 检查Java证书库 keytool -list -keystore $JAVA_HOME/lib/security/cacerts ``` ### 5. 日志分析 在HDFView启动参数添加调试模式: ```properties -Dorg.slf4j.simpleLogger.defaultLogLevel=debug ``` 日志路径通常位于: - Windows:`%APPDATA%\HDFView\logs` - Linux/macOS:`~/.hdfview/logs` ### 6. 身份验证流程确认 确保遵循正确的认证协议: $$ OAuth2.0 \流程:Client \rightarrow AuthServer \rightleftharpoons ResourceServer $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值