Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

终于AC了 不过网上的解法我看不懂嗄 请大牛指教!!!!

Posted by xiaotianwei at 2010-03-19 17:32:07 on Problem 1160
网上的解法:
#include<stdio.h>
const int MAX=3000000;
int v,p_o,dis[301];
int opt[31][301],cost[301][301];
int main()
{
    scanf("%d%d",&v,&p_o);
    int i,j,k;
    for(i=1;i<=v;i++) scanf("%d",&dis[i]);
    for(i=1;i<=v;i++)
       for(j=i;j<=v;j++)
       {
          cost[i][j]=0;
          int mid=(i+j)/2;
          for(k=i;k<=j;k++)
             cost[i][j]+=(dis[mid]-dis[k])>0?dis[mid]-dis[k]:dis[k]-dis[mid];
       }
    for(i=0;i<=p_o;i++)
       for(j=0;j<=v;j++) opt[i][j]=MAX;
    opt[0][0]=0;
    for(i=0;i<=p_o;i++)
       for(j=0;j<=v;j++)
       {
           for(k=1;k+j<=v;k++)
           {
              if(opt[i+1][j+k]>opt[i][j]+cost[j+1][j+k])
                 opt[i+1][j+k]=opt[i][j]+cost[j+1][j+k];
           }
       }
    printf("%d\n",opt[p_o][v]);
    return 0;
}
我的解法 不过代码有点丑:
#include<iostream>
#include<cstdio>
using namespace std;
const int lmax=301;
const int Lmax=3000000;
int cost[lmax][lmax],min_sum[lmax][lmax];
int d[lmax];
int main()
{
	int v,postoffice,i,j,k,middle;
	scanf("%d%d",&v,&postoffice);
	for(i=1;i<=v;i++)scanf("%d",&d[i]);
	for(i=1;i<v;i++)
	{
		for(j=i;j<=v;j++)
		{
			cost[i][j]=0;
			if(i==j)continue;
			middle=(i+j)/2;
			for(k=i;k<=j;k++)
			{
				cost[i][j]+=(d[k]-d[middle])>0?d[k]-d[middle]:d[middle]-d[k];
			}
		}
	}
	for(i=1;i<=postoffice;i++)
	{
		for(j=1;j<=v;j++)
		{
			min_sum[i][j]=Lmax;
		}
	}
	for(i=1;i<=v;i++)
	{
		min_sum[1][i]=cost[1][i];
	}
	for(i=2;i<=postoffice;i++)
	{
		for(j=1;j<=v;j++)
		{
			for(k=1;k<j;k++)
			{
				if(min_sum[i][j]>min_sum[i-1][k]+cost[k+1][j])
                        {
                        	min_sum[i][j]=min_sum[i-1][k]+cost[k+1][j];
                        }
			}
		}
	}
	printf("%d\n",min_sum[postoffice][v]);
	return 0;
}
                        	
				
			

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator