Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
This is a typical DP problem, but you should use leftist tree in this problem to reduce time complexity to O(nlogn)In Reply To:这样做对不对?? Posted by:faen at 2005-10-24 18:36:11 > import java.util.*; > import java.io.*; > public class Main1738n > { > static int [] sum; > public static void main(String [] args) throws Exception > { > Scanner cin=new Scanner(new FileInputStream("c:\\in.txt")); > while(true) > { > int n=cin.nextInt(); > if(n==0)break; > int [] p=new int[n]; > int [][] q=new int[n][n]; > sum=new int[n]; > for(int i=0;i<n;i++) > p[i]=cin.nextInt(); > sum[0]=p[0]; > for(int i=1;i<n;i++) > sum[i]=p[i]+sum[i-1]; > int total=f(0,n-1,q,p); > System.out.println(total); > } > } > > public static int f(int i,int j,int [][] q,int [] p) > { > if(i==j) > return 0; > if(i+1==j) > return p[i]+p[j]; > if(q[i][j]>0) > return q[i][j]; > int min=Integer.MAX_VALUE; > for(int k=i;k<j;k++) > { > int tmin=f(i,k,q,p)+f(k+1,j,q,p)+sum[j]-sum[i]+p[i]; > if(min>tmin) > min=tmin; > } > > return q[i][j]=min; > > } > } > > > > > Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator