POJ 1205 Water Treatment Plants JAVA高精度+DP *

题目地址:http://poj.org/problem?id=1205

1.把自己的污水排到河里V

2.把自己的污水送到右边>

3.把自己的污水送到左边<

至少要有一个城市排水。要求给N个城市,方案种数。


用递推的方法,从1个到n个

定义A(n)为n个城市的总数,也就是这n个城市可以解决排水问题

那么就尝试从n个城市推到n-1

假设:

1.第n个城市是V,那么也就是有A(n-1)种

2.第n个城市是<:那么有两种可能

第n-1个城市是V或者<,那么就A(n-1)种可能

第n-1个城市是>,也就是增加了 A(n-1)-A(n-2)种


所以 A(n)=3*A(n-1)-A(n-2);

import java.util.*;
import java.math.*;
import java.text.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		Scanner cin = new Scanner(new BufferedInputStream(System.in));

		BigInteger[] d = new BigInteger[105];
		d[1]=BigInteger.valueOf(1); d[2]=BigInteger.valueOf(3);
		for(int i=3;i<=100;++i){
			d[i]=d[i-1].multiply(BigInteger.valueOf(3)).subtract(d[i-2]);
		}

		while(cin.hasNext()){
			int n=cin.nextInt();
			System.out.println(d[n]);
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值