zoukankan      html  css  js  c++  java
  • 【回溯法】竞赛游戏

    题目描述

    某游戏规则中,甲乙双方战斗,每一回合总能分出胜负,游戏规定:
    1.失败的一方要将自己体力值的1/4加给胜利的一方。
    2.游戏开始时,甲的体力值是1000,乙的体力值是2000。
    3.每一回合,甲乙胜利的概率均为50%。
    求解4个回合后,双方体力值之差小于1000的概率。

    分析

    每一回合结束,要么甲赢,要么乙赢。n个回合,那么有2^n种结果,采用回溯法从解空间中,中找出abs(a-b)<1000的结果即可。

    代码

    #include<stdio.h>
    #include<stdlib.h>
    #define MAX 1000
    int i=1,count=0;
    float m=1000,a=1000,n=1000,b=1000;
    void backdate(int n);
    int sum;
    int main()
    {
    	scanf("%d",&sum);
    	backdate(1);
    	printf("%d",count);
    	return 0;
    }
    void backdate(int i)
    {
    	float tmp;
    	int j;
    	if(i>sum)
    	{
    		if(abs(a-b)<1000)
    			count++;
    		return ;
    	}
    	m=a,n=b;		
    	a+=b/4;
    	b-=b/4;
    	backdate(i+1);
    	a=m,b=n;
    	b+=a/4;
    	a-=a/4;
    	backdate(i+1);	
    	return;
    }
    
    
  • 相关阅读:
    CodeForces
    hdu4003 树形dp
    hdu2196
    poj2486
    hdu1502 树形dp入门题
    cf 686D
    bzoj2763 分层图
    hdu4424 并查集+贪心+思维
    poj1734 最小环+输出路径
    集训题解1
  • 原文地址:https://www.cnblogs.com/zhengkang/p/5729070.html
Copyright © 2011-2022 走看看