zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯 算法提高 概率计算

    算法提高 概率计算
    时间限制:1.0s 内存限制:256.0MB

    问题描述
      生成n个∈[a,b]的随机整数,输出它们的和为x的概率。
    输入格式
      一行输入四个整数依次为n,a,b,x,用空格分隔。
    输出格式
      输出一行包含一个小数位和为x的概率,小数点后保留四位小数
    样例输入
    2 1 3 4
    样例输出
    0.3333
    数据规模和约定
      对于50%的数据,n≤5.
      对于100%的数据,n≤100,b≤100.

    import java.io.IOException;
    import java.util.Scanner;
    
    
    public class 概率计算 {
    	static int n, a, b, x;
    	static int max, min;
    	static double sum;
    	static double dp[][], arr[];
    	static int t;
    	public static void main(String [] args) throws IOException
    	{
    		Scanner sc = new Scanner(System.in);
    		n = sc.nextInt();
    		a = sc.nextInt();
    		b = sc.nextInt();
    		x = sc.nextInt();
    		
    		t = b-a+1;
    		sum = Math.pow(t, n);
    		
    		max = b*n;
    		min = 1;
    		
    		arr = new double[t+1];
    		dp = new double[n+1][max+1];
    		
    		for(int i = 1, j = a; i <= t; ++i, ++j)
    		{
    			arr[i] = j;
    		}
    		
    		for(int i = a; i <= b; ++i)
    		{
    			dp[1][i] = 1;
    		}
    		
    		for(int i = 2; i <= n; ++i)
    		{
    			for(int j = 1; j <= t; ++j)
    			{
    				for(int k = min; k <= max; ++k)
    				{
    					if(dp[i-1][(int) (k-arr[j] <= 0? 0 : k-arr[j])] != 0)
    					{
    						dp[i][k] += dp[i-1][(int) (k-arr[j] <= 0? 0 : k-arr[j])];
    					}
    				}
    			}
    		}
    		double ans = 1.0*dp[n][x]/sum;
    		System.out.printf("%.4f", ans);
    		
    		sc.close();
    	}
    
    
    }
    
    
  • 相关阅读:
    scanf正则表达式
    找出 alter system kill session ‘sid,serial#’ kill 掉的数据库会话对应进程
    查询包含某个字段的表
    Oracle12C查询自建用户(非系统自带)
    监控慢SQL
    根据SPID查找SQL语句
    查看表空间使用率
    找出在使用临时表空间的SQL
    重设数据文件大小sql语句
    查看锁表进程SQL语句
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078871.html
Copyright © 2011-2022 走看看