zoukankan      html  css  js  c++  java
  • POJ 1322

    POJ百题,平平无奇

    DP转移非常水,然而这道题判断数据复杂度实在是绞尽脑汁,然而等到看到其他对于这种复杂度解决方法,实在大跌眼镜。

    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <stack>
    #include <map>
    #include <set>
    #include <deque>
    using namespace std;
    
    const int maxn= 1e6+5;
    const int maxc= 105;
    
    struct Frac
    {
    	int nu, de;
    	Frac(int _nu= 0, int _de= 0) : nu(_nu), de(_de) {}
    };
    double dv[2][maxc];
    double co_l[maxc], co_r[maxc];
    
    int main(int argc, char const *argv[])
    {
    	int c, n, m;
    	while (~scanf("%d", &c) && c){
    		scanf("%d %d", &n, &m);
    		if (m> n || m> c || ((m+n)&1)){
    			printf("0.000
    ");
    			continue;
    		}
    		int cur= 0, pre;
    		dv[cur][0]= 1;
    		for (int i= 1; i<= c; ++i){
    			dv[cur][i]= 0;
    		}
    		for (int i= 1; i<= c; ++i){
    			co_l[i]= (c-i+1)/((double)c);
    		}
    		for (int i= 0; i< c; ++i){
    			co_r[i]= (i+1)/((double)c);
    		}
    		co_l[0]= 0;
    		co_r[c]= 0;
    		if (n> 1000){
    			n= 1000+(n&1);
    		}
    		for (int i= 1; i<= n; ++i){
    			pre= cur;
    			cur^= 1;
    			for (int j= 0; j<= c; ++j){
    				dv[cur][j]= 0;
    				if ((i+j) & 1){
    					continue;
    				}
    				if (j> 0){
    					dv[cur][j]+= dv[pre][j-1]*co_l[j];
    				}
    				if (j< c){
    					dv[cur][j]+= dv[pre][j+1]*co_r[j];
    				}
    			}
    		}
    		printf("%.3lf
    ", dv[cur][m]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    信息安全系统设计基础第二周学习总结
    java实验报告五
    java实验报告三
    java实验报告二
    java实验报告一
    mysql
    C语言理论知识
    数据存储与输出输入
    软件开发概述 编程语言概述
    C语言 常用单词
  • 原文地址:https://www.cnblogs.com/Idi0t-N3/p/14726677.html
Copyright © 2011-2022 走看看