POJ 2096 Collecting Bugs (概率dp)


Collecting Bugs
Time Limit: 10000MS Memory Limit: 64000K
Total Submissions: 3240 Accepted: 1601
Case Time Limit: 2000MS Special Judge

Description

Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stuff, he collects software bugs. When Ivan gets a new program, he classifies all possible bugs into n categories. Each day he discovers exactly one bug in the program and adds information about it and its category into a spreadsheet. When he finds bugs in all bug categories, he calls the program disgusting, publishes this spreadsheet on his home page, and forgets completely about the program.
Two companies, Macrosoft and Microhard are in tight competition. Microhard wants to decrease sales of one Macrosoft program. They hire Ivan to prove that the program in question is disgusting. However, Ivan has a complicated problem. This new program has s subcomponents, and finding bugs of all types in each subcomponent would take too long before the target could be reached. So Ivan and Microhard agreed to use a simpler criteria --- Ivan should find at least one bug in each subsystem and at least one bug of each category.
Macrosoft knows about these plans and it wants to estimate the time that is required for Ivan to call its program disgusting. It's important because the company releases a new version soon, so it can correct its plans and release it quicker. Nobody would be interested in Ivan's opinion about the reliability of the obsolete version.
A bug found in the program can be of any category with equal probability. Similarly, the bug can be found in any given subsystem with equal probability. Any particular bug cannot belong to two different categories or happen simultaneously in two different subsystems. The number of bugs in the program is almost infinite, so the probability of finding a new bug of some category in some subsystem does not reduce after finding any number of bugs of that category in that subsystem.
Find an average time (in days of Ivan's work) required to name the program disgusting.

Input

Input file contains two integer numbers, n and s (0 < n, s <= 1 000).

Output

Output the expectation of the Ivan's working days needed to call the program disgusting, accurate to 4 digits after the decimal point.

Sample Input

1 2

Sample Output

3.0000

Source

Northeastern Europe 2004, Northern Subregion

题目链接: http://poj.org/problem?id=2096

题目大意: 一个软件有 s 个子系统, n 种 bug。某人一天能找到一个 bug。求在这个软件中找齐 n 种 bug,并且每个子系统中至少包含一个 bug 的时间的 期望

题目分析:基础的概率dp,dp[i][j]表示发现i种bug,j个子系统已发现bug离目标还需要的期望次数,首先dp[n][s]必然为0,分四种情况讨论,都没找到,找到新的i旧的j,找到旧的i新的j,找到新的i新的j,概率公式很好计算,方程从后往前递推即可

#include <cstdio>
#include <cstring>
int const MAX = 1005;
double dp[MAX][MAX];

int main()
{
    int n, s;
    while(scanf("%d %d", &n, &s) != EOF)
    {
        memset(dp, 0, sizeof(dp));
        for(int i = n; i >= 0; i--)
        {
            for(int j = s; j >= 0; j--)
            {
                if(i == n && j == s)
                    continue;
                dp[i][j] = (1.0 + ((1.0 * (n - i) / n) * (1.0 * j / s)) * dp[i + 1][j] +
                            ((1.0 * (s - j) / s) * (1.0 * i / n)) * dp[i][j + 1] +
                            ((1.0 * (n - i) / n) * (1.0 * (s - j) / s)) * dp[i + 1][j + 1])
                            / (1.0 - ((1.0 * i / n) * (1.0 * j / s)));
            }
        }
        printf("%.4f\n", dp[0][0]);
    }
}


### Win7虚拟机远程桌面横屏解决方案 在解决Win7虚拟机远程桌面横屏问题时,需要考虑多个因素,包括虚拟机的配置、远程桌面客户端的设置以及显示驱动的支持。以下是一些可能的解决方案: #### 1. 调整虚拟机的分辨率设置 确保虚拟机内的Windows 7系统支持所需的分辨率,并且能够正确识别远程桌面客户端的屏幕尺寸。可以通过以下步骤调整分辨率: - 在虚拟机中打开“控制面板”->“外观和个性化”->“调整屏幕分辨率”。 - 设置适当的分辨率以匹配远程桌面客户端的横屏模式[^1]。 #### 2. 配置远程桌面客户端 在使用远程桌面连接时,客户端的显示设置会直接影响虚拟机的显示方向。可以尝试以下方法: - 在远程桌面连接对话框中,点击“显示”选项卡,选择“使用所有我的显示器进行远程连接”。 - 如果需要自定义分辨率,可以在命令行中通过`mstsc /span`参数启动远程桌面客户端,这将使窗口扩展到所有可用的显示器上[^3]。 #### 3. 更新显卡驱动程序 有时,显卡驱动程序不兼容或过时可能导致显示方向问题。建议更新虚拟机中的显卡驱动程序: - 在虚拟机中访问设备管理器,找到显示适配器并更新驱动程序。 - 如果使用的是特定的虚拟化平台(如VMware或VirtualBox),请安装相应的增强工具(如VMware Tools或Guest Additions)[^1]。 #### 4. 使用第三方工具 如果上述方法无法解决问题,可以尝试使用第三方工具来强制更改显示方向。例如,使用AutoHotkey脚本或专门的显示管理工具来锁定横屏模式[^3]。 ```python # 示例:使用Python调用系统命令更改分辨率 import os def set_resolution(width, height): command = f"powershell -Command \"& {{(Get-WmiObject -Namespace root\\wmi -Class WmiMonitorBasicDisplayParams).Active = $true; (Get-WmiObject -Namespace root\\wmi -Class WmiSetResolution).Timings = '{width} {height}';}}\"" os.system(command) set_resolution(1920, 1080) # 设置为常见的横屏分辨率 ``` #### 5. 检查虚拟化平台设置 如果虚拟机运行在特定的虚拟化平台上,请检查该平台的显示设置: - 对于VMware,可以在虚拟机设置中调整“显示”选项下的“屏幕”分辨率。 - 对于VirtualBox,可以在“显示”选项中启用3D加速,并调整最大视频内存大小。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值