poj 1205 :Water Treatment Plants (DP+高精度)

简介: 思路:DP+高精度。DP部分,易得最右边城市的状态只可能用3种:>V, V, <。故分三种状态讨论,设dp[i][0]为第i个城市的状态为:> V ,dp[i][1]为:V ,dp[i][2]为:<。由实际流动的可能性可以得到状态转移方程:

题意:有n个城市,它们由一个污水处理系统连接着,每个城市可以选择

1、将左边城市过来的污水和右边城市过来的污水连同本身的污水排到河里  >V<

2、将左边来的污水连同自己的污水排到右边  >>

3、将右边来的污水连同自己的污水排到左边  <<


问总共有多少种处理情况,即不同又符合实际的><V组合。


思路:DP+高精度。DP部分,易得最右边城市的状态只可能用3种:>V, V, <。故分三种状态讨论,设dp[i][0]为第i个城市的状态为:> V ,dp[i][1]为:V ,dp[i][2]为:<。由实际流动的可能性可以得到状态转移方程:


dp[i][0] = dp[i-1][0] + dp[i-1][1];


dp[i][1] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2];


dp[i][2] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2];


然后可以整理为:dp[i] = 3 * dp[i-1] + dp[i-2]。然后用java的BigInteger预处理就OK了。


以下是java代码:

import java.util.Scanner;
import java.math.*;
public class Main {
  public static void main(String[] args) {
    int n;
    Scanner cin = new Scanner(System.in);
    BigInteger[] a = new BigInteger[110];
    a[1] = BigInteger.valueOf(1);
    a[2] = BigInteger.valueOf(3);
    for (int i = 3; i <= 100; i++) {
      a[i] = a[i-1].multiply(BigInteger.valueOf(3)).subtract(a[i-2]);
    }
    while (cin.hasNextInt()) {
      n = cin.nextInt();
      System.out.println(a[n]);
    }
    cin.close();
  }
}
目录
相关文章
|
算法
poj 2479 Maximum sum(求最大子段和的延伸)
看完最大连续子段和 的 dp算法 这个很容易理解,我用dplift[i]保存第1到第i个之间的最大子段和,dpright[i]保存第i到第n个之间的最大子段和,最终结果就是dplift[i]+dpright[i+1]中最大的一个。
54 0
|
存储
poj 3254 Corn Fields (状态压缩dp)
状态压缩dp其实就是用二进制来表示所有的状态,比如这题, 我们在某一行可以这样取0 1 0 1 1 0 1,用1代表取了,0代表没取,因为这点,它的数据量也限制在20以内,所有看到这样数据量的题目可以先考虑一下状态压缩dp。对于有多行的数据,所有状态的总数必然很庞大,而且不用特殊的方法想要存储这些状态是不太现实的。既然每个点只有这两种情况,我们可以用二进制的一位来表示,0 1 0 1 1 0 1就可以表示为二进制0101101也就是十进制的45,如果我们想要枚举6个点的所有状态,我们只需要从0到2^6取其二进制就可以了,并不会重复或是多余。
36 0
|
算法
poj 1050 To the Max(最大子矩阵之和)
poj 1050 To the Max(最大子矩阵之和)
42 0
hdoj 1028/poj 2704 Pascal's Travels(记忆化搜索||dp)
有个小球,只能向右边或下边滚动,而且它下一步滚动的步数是它在当前点上的数字,如果是0表示进入一个死胡同。求它从左上角到右下角到路径数目。 注意, 题目给了提示了,要用64位的整数。
42 0
|
人工智能 算法
A. Average Height(找相邻的数除2产生整数更多的排列)(codeforces715)
A. Average Height(找相邻的数除2产生整数更多的排列)(codeforces715)
38 0
|
机器学习/深度学习 人工智能
51nod 1055 最长等差数列 (dp好题)
51nod 1055 最长等差数列 (dp好题)
57 0
AC牛客 BM97 旋转数组
AC牛客 BM97 旋转数组
95 0
|
Java
[LeetCode]Max Area of Island 岛屿的最大面积
链接:https://leetcode.com/problems/max-area-of-island/description/难度:Easy题目:695.
877 0