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的比重会大很多。
另外,这题的递归部分我写的很爽。开始想不清楚,后来递归的调试过程中发现原来可以写得如此整齐。
思维和代码的美丽之处就在这里了,好吧我是不是太低端了点。。。估计高手会说这不是很明显的嘛。。。
- uva 348 Optimal Array Multiplication Sequence
- uva:348 - Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- UVA 348 Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- uva 348 - Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- Uva-348-Optimal Array Multiplication Sequence
- UVa 348: Optimal Array Multiplication Sequence
- UVa:348 Optimal Array Multiplication Sequence
- UVA - 348 Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence (DP)
- uva 348 - Optimal Array Multiplication Sequence
- UVa 348 Optimal Array Multiplication Sequence(dp)
- UVa 348 - Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- 旋转矩阵推导
- hdu 1495Legal or Not(搜索+模拟)
- C语言结构体实例一
- VC中按相对路径打开文件
- Linux中设置服务自启动的三种方式
- uva 348 - Optimal Array Multiplication Sequence
- C++ opencv数学方法判断点是否在三角形内
- 第九周任务一
- sql server2000数据类型
- 字符串反转
- spring事物控制详细整理
- 写了一个jQuery滑动条插件
- 不用按ctrl+alt,移动鼠标也能实现虚拟机与真实系统的自由切换
- 11级_Java_曹建波 05.06 spring aop术语概述