Java教程

HDU4165 Pills

本文主要是介绍HDU4165 Pills,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

链接

Pills - http://acm.hdu.edu.cn/showproblem.php?pid=4165

分析

  • 共N片,每一片都会被取到,因此取到完整的一片的次数是N
  • 每一次取到完整的一片,都会有半片放回,故共有N个半片
  • 每一个半片都会被取到
  • 取到完整的一片次数一定不少于取到半片的次数
  • 结论:符合 ± 1 \pm1 ±1 模型,因此判定是卡特兰数

代码

从哪里来?【0MS】

#include <bits/stdc++.h>
using namespace std;
#define MXN 35
long long c[MXN] = {1,1};
void init(){
    for(int i = 2; i < MXN; i++){
        for(int j = 0; j < i; j++){
            c[i] += c[j]*c[i-j-1];
        }
    }
}
int main(){
    int n;
    init();
    while(scanf("%d", &n), n){
        cout << c[n] << endl;
    }
    return 0;
}

到哪里去?【0MS】

#include <bits/stdc++.h>
using namespace std;
#define MXN 35
long long c[MXN<<1] = {1};
void init(){
	for(int i = 0; i < MXN; i++){
		for(int j = 0; j <= i; j++){
			c[j+i+1] += (i==j?1:2)*c[j]*c[i];
		}
	}
}
int main(){
    int n;
    init();
    while(scanf("%d", &n), n){
        cout << c[n] << endl;
    }
    return 0;
}
这篇关于HDU4165 Pills的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!