标签:1.0 int 22% 蓝桥 ALGO 1007 include dp
1. 题目描述
2. 说明
非常感谢大佬的博客分享。讲解非常详细,附上链接。如果有朋友看到我这篇文章,可以直接点击下面链接去大佬博客,本人写只是为了记录一下自己的学习过程https://blog.csdn.net/okok__TXF/article/details/121099645?ops_request_misc=%7B%22request%5Fid%22%3A%22164179882416780255247794%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=164179882416780255247794&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-121099645.pc_search_insert_ulrmf&utm_term=蓝桥杯印章&spm=1018.2226.3001.4187#commentBox
3. 思路
虽然开始一看就知道这是个算概率的问题。但是如何用代码能解决这一类问题确实不会,然后看了一下题目关键词是dp,又去做了下0-1背包,通过上文博主的解释恍然大悟。
然后感觉这个题的关键在于以下方程:
dp[i][j]=dp[i-1][j-1]*(1-(j-1)*1.0/n)+dp[i-1][j]*((j*1.0)/n);
解释
4. 代码
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main ()
{
int n,m;
cin>>n>>m;
double p=1.0/n;
double dp[m+1][n+1];
for(int i=1;i<=m;++i)
{
for(int j=1;j<=n;++j)
{
if(i<j)
dp[i][j]=0;
else if(j==1)
{
dp[i][j]=pow(p,i-1);
}
else
{
dp[i][j]=dp[i-1][j-1]*(1-(j-1)*1.0/n)+dp[i-1][j]*((j*1.0)/n);
}
}
}
cout<<fixed<<setprecision(4)<<dp[m][n];
return 0;
}
标签:1.0,int,22%,蓝桥,ALGO,1007,include,dp 来源: https://blog.csdn.net/godvlike/article/details/122419488
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。