還有疑惑,需要重新推:
但是學到的:
1、a=a+b+c abc是三種情況,那麼p(a)=a*p(a->事件)+b*p(b->事件)+c*p(c->事件);
a->事件意思是 在a情況下的事件,就是全概率公式的思想吧
2、一定注意每一步會不會出現分母為0 的情況,以及預處理的時候對於一些特殊情況導致自己的式子會出現分母為0的排除掉
3、概率dp經常出現推出了式子但是自己不會寫**的情況,那麼就模擬計算,注意迭代找計算規律
題解參考著兩個:
至於第一篇部落格提到的tle的事情,目測是分母出現0了,其實演算法挺多的,不一定用那個:
可以這樣:(因為dp[i][i]和dp[i][1] c[j]已經算出來了)
for(int j=2;j
for(int j=2;j#include #include #include #include #include #include #include #include #include using namespace std;
#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i>1;
const double eps = 1e-8;
const int maxn = 2000+5;
double dp[maxn][maxn],pp[maxn];
double c[maxn];
int main()
{ //in("hdu4089.txt");
int n,m,k;
double p1,p2,p3,p4,p21,p31,p41;
while(~scanf("%d%d%d",&n,&m,&k))
{cl(dp,0);
scanf("%lf%lf%lf%lf",&p1,&p2,&p3,&p4);
if(abs(1.0-p1-p2)
不錯的網試題目(集合dp)
floyd 路徑dp 集合dp for int s i i 1 s s s 1 i 列舉i的每乙個非空真子集s,若包含i需修改s初始化 ifndef solver h define solver h include using namespace std const int kmaxn 55 con...
hdu4415 不錯的想法題
題意 乙個人他有一定的血,有一些怪物,他去殺怪物,有的怪物殺死他後還可以在不費自己血的情況下任意殺死一些怪物,問你他最多殺死多少怪物,在最多殺怪前提下最好用多少血,大體題意是這樣 思路 首先我們把怪物分成兩個集合,a乙個是殺死他後可以免費殺死其他人的,b另乙個是殺死他後不能免費殺死其他人的,分析下我...
hdu4415 不錯的想法題
題意 乙個人他有一定的血,有一些怪物,他去殺怪物,有的怪物殺死他後還可以在不費自己血的情況下任意殺死一些怪物,問你他最多殺死多少怪物,在最多殺怪前提下最好用多少血,大體題意是這樣 思路 首先我們把怪物分成兩個集合,a乙個是殺死他後可以免費殺死其他人的,b另乙個是殺死他後不能免費殺死其他人的,分析下我...