uva 348 - Optimal Array Multiplication Sequence

来源:互联网 发布:非p2p下载软件 编辑:程序博客网 时间:2024/05/01 19:30
import java.io.*;import java.util.*;class matrix{    int x,y;    public matrix(int a,int b){        x = a;        y = b;    }}public class Main{    public static String backtrack(int track[][],int start, int end){        if(start>=end) return "A"+(start+1);        String left = backtrack(track,start,track[start][end]);        String right = backtrack(track,track[start][end]+1,end);        return "("+left+ " x "+ right+")";    }    public static void main (String [] args) throws Exception {        Scanner scan = new Scanner(System.in);        int count = 1;        while(scan.hasNextInt()){            int num = scan.nextInt();            if(num==0) return;            matrix arr[] = new matrix[num];            for(int i=0;i<num;i++){                arr[i] = new matrix(scan.nextInt(),scan.nextInt());            }            int dp[][] = new int[num][num];            int track[][] = new int[num][num];            for(int gap = 1;gap<num;gap++){                for(int i=0;i<num;i++){                    int j = i+gap;                    if(j>=num) break;                    int min = 999999999;                    int pos = i;                    for(int k=i;k<j;k++){                        int tmp = dp[i][k]+dp[k+1][j]+arr[i].x*arr[k].y*arr[j].y;                        if(tmp<min){                            min = tmp;                            pos = k;                        }                    }                    dp[i][j] = min;                    track[i][j] = pos;                }            }            System.out.println("Case "+count+": "+backtrack(track,0,num-1));            count++;        }    }}

题目就不讲了,经典DP,不明白每个细节的话还是要多想想,多看书

感觉不错,这题RE了两次,然后自己通过思考,想明白了RE的原因,改对了。

不看提示,不上网搜,华丽的Accepted是令人很兴奋 的。


POJ上刷了300题,其实自己能力还是很弱。最大的问题在于思维能力不行,查错能力不行。

POJ想不出的题就去看提示,有思路但写不对的题就去讨论版块或者网上找测试数据。

这两个步骤省略掉就剩下无尽的coding和调代码了,其实coding和调代码也是能让人进步的,但是只在菜鸟时期能给你带来进步。

能让你的代码写的比较简略,比较清晰。

但是算法能力的进步还是依赖被我省略掉的步骤,思考和纠错。其实纠错也就是纠思维上的漏洞,如果只是代码写错了而不是思维的漏洞,那只能说犯了低级错误。


其实仔细想想思考才是刷题的精华所在,这个步骤一旦省略,跑去网上找算法,那么这个题目60%到70%的精华已经没了。

纠错是另外的20%到30%,纯coding只占10%-20%。当然,对于一些数据结构很复杂或者复杂的模拟题,纯coding的比重会大很多。


另外,这题的递归部分我写的很爽。开始想不清楚,后来递归的调试过程中发现原来可以写得如此整齐。

思维和代码的美丽之处就在这里了,好吧我是不是太低端了点。。。估计高手会说这不是很明显的嘛。。。

原创粉丝点击