poj 2591,1338 DP

来源:互联网 发布:淘宝大学证书真的吗 编辑:程序博客网 时间:2024/06/05 16:26
import java.io.*;import java.util.*;public class Main {     static int arr[] = new int[10000002];    public static void pre_processing(){        int x2 = 1;        int x3 = 1;        arr[1] = 1;        for(int i=2;i<arr.length;i++){            arr[i] = Math.min(2*arr[x2]+1, 3*arr[x3]+1);            if(arr[i]==2*arr[x2]+1) x2++;            if(arr[i]==3*arr[x3]+1) x3++;        }    }    public static void main(String[] args) throws Exception {        Scanner scan = new Scanner(System.in);        pre_processing();        while(scan.hasNextInt()){            System.out.println(arr[scan.nextInt()]);        }    }}

最开始我设4个变量 2*t1+1, 3*t1+1, 2*t2+1, 3*t2+1, 然后一看很多乱序。

其实2倍的数可以远小于3倍的数,就像3×9+1 = 28其实还比13×2+1大,这顺序就乱了。

要讨一点巧,简单的说就是换一个角度看问题。


然后一点就是貌似默认不能有重复元素,于是我在这里又调整一次代码。。。

总的来说是水题,但是还是考脑子转不转。。。

原创粉丝点击