文档详情

130、鳄鱼!水泡?大作战!.docx

发布:2025-02-07约2.89千字共4页下载文档
文本预览下载声明

方法优劣分析

优点:这种方法可以准确地计算出期望得分。

缺点:需要两层循环,某些极端情况下时间复杂度很高。

时间复杂度分析

时间复杂度为?O(n)O(n×100)=O(n)。

空间复杂度O(n)O(n×100)=O(n)。

AC_Code

C++

#includeiostream

#includevector

usingnamespacestd;

intmain(){

intn;

cinn;

vectorpairint,intballoons(n);

for(inti=0;in;i++){

cinballoons[i].firstballoons[i].second;

}

//dp[i][j]代表在第i轮,击中概率为j%时的期望得分。

vectorvectordoubledp(n+1,vectordouble(101,0));

dp[0][balloons[0].first]=0;//初始概率

for(inti=1;i=n;i++){

inta=balloons[i-1].first,b=balloons[i-1].second;

for(intj=0;j=100;j++){//0到100的击中概率

doublehit_prob=j/100.0;

doublemiss_prob=1-hit_prob;

intprev_prob=min(j+10,100);//增加10%但最大为100%

dp[i][j]=hit_prob*(dp[i-1][prev_prob]+b)+miss_prob*dp[i-1][j];

}

}

printf(%.2lf\n,dp[n][balloons[0].first]);

return0;

}

Java

importjava.util.Scanner;

importjava.util.ArrayList;

importjava.util.List;

publicclassMain{

publicstaticvoidmain(String[]args){

Scannerscanner=newScanner(System.in);

intn=scanner.nextInt();

Listint[]balloons=newArrayList();

for(inti=0;in;i++){

inta=scanner.nextInt();

intb=scanner.nextInt();

balloons.add(newint[]{a,b});

}

//dp[i][j]代表在第i轮,击中概率为j%时的期望得分。

double[][]dp=newdouble[n+1][101];

dp[0][balloons.get(0)[0]]=0;//初始概率

for(inti=1;i=n;i++){

inta=balloons.get(i-1)[0],b=balloons.get(i-1)[1];

for(intj=0;j=100;j++){//0到100的击中概率

doublehitProb=j/100.0;

doublemissProb=1-hitProb;

intprevProb=Math.min(j+10,100);//增加10%但最大为100%

dp[i][j]=hitProb*(dp[i-1][prevProb]+b)+missProb*dp[i-1][j];

}

显示全部
相似文档