首页 > 其他分享 >Fast Food UVA - 662

Fast Food UVA - 662

时间:2023-04-24 22:23:22浏览次数:27  
标签:cas Food 662 Fast int 村庄 printf UVA

政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设0<n≤m<500)。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,计算最小值。

 

 F [ i] [j ]= min{ f[k][j-1] + c[k+1][i] }

 

#include "bits/stdc++.h"
using namespace std;
 #define N 1003
 int m,n,a[N],c[N][N],f[N][N],p[N][N];
 
 void print_path(int i, int j){
    if (i <= 0)
        return;
    int k = p[i][j];
    print_path(k,j-1);
    if (k + 1 == i)
        printf("Depot %d at restaurant %d serves restaurant %d\n", j, (k + 1 + i) >> 1, k+ 1);
    else
        printf("Depot %d at restaurant %d serves restaurants %d to %d\n", j, (k + 1 + i) >> 1, k + 1, i);
 }


 void sov(int cas){
 	int i,j,k;
 	for(i=1;i<=n;i++) cin>>a[i] ;
 	for(i=1;i<=n;i++)
 	 for(j=i+1;j<=n;j++)
 	  c[i][j]=c[i][j-1]+a[j]-a[(i+j)/2];
 	  
 	memset(f,127,sizeof f);
 	for(i=1;i<=n;i++) f[i][1]=c[1][i];
 	
 	for(i=2;i<=n;i++)
 	 for(j=2;j<=m&&j<=i;j++)
 	  for(k=j-1;k<i;k++){
 	  	int t =f[k][j-1]+c[k+1][i];
 	  	if(f[i][j]>t) p[i][j]=k,f[i][j]=t;
 	  }
 	printf("Chain %d\n",cas);
        print_path(n,m);
        printf("Total distance sum = %d\n\n",f[n][m]);
 	//cout<<f[n][m]<<endl;
 }
 signed main(){
 	int cas=0;
 	while(cin>>n>>m){ if(n==0&&m==0) break; sov(++cas); }
 }

 

标签:cas,Food,662,Fast,int,村庄,printf,UVA
From: https://www.cnblogs.com/towboa/p/17351152.html

相关文章

  • Movie collection UVA - 1513
    有n个影碟,标号为1~n,位置为0~n-1,每次取出一个影碟看完后,将其放在最前面(标号为0处),问每个影碟取出前,其位置之前有多少个影碟 开2倍数组,"i放置前面"这个操作add(i,-1),add(newi,1)  #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingn......
  • Prime k-tuple UVA - 1404
        一个步骤: 在[a,b]中标记S的倍数 #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=1e5+20;constintQ=2e9+2;#defineintlonglongboolvis[Q];intb[N],pm[N],tot=0;......
  • The Bells are Ringing UVA-12119
    已知M为T1,T2,T3的LCM输出满足Ti-Tj<=25的所有可能情况#include<iostream>#include<cmath>#include<algorithm>#include<cstring>usingnamespacestd;constintN=1E6+3;#defineintlonglongintpm[N],tot;intb[N],fac[N],F[N],len,cnt[N]......
  • UVA11014
     给定一个NxNxN的正方体,求出最多能选几个整数点。使得随意两点PQ不会使PQO共线。  F(k)#include<iostream>#include<cmath>#include<algorithm>usingnamespacestd;constintN=5e5;#defineintlonglongintb[N+2],pm[N+2],tot=0;intn;intpow3(intx){......
  • Gauss Prime UVA - 1415
     #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=5e4;intb[N+2],pm[N+2],tot=0;voidinit(){b[1]=1;for(inti=2;i<=N;i++){if(b[i])continue;pm[++tot]=i;......
  • Counting Rectangles UVA - 10574
    给出n个点。问选出4个点作为定点,能够组成多少个平行与坐标轴的矩形。 点按照x排序 n^2挑选出垂直x轴的线段,按照y1排序  #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=1e5;structT{ intx......
  • Eigensequence UVA - 11133
    给你一个递增序列的第一位a1,最后一位an,求有多少个序列满足:以a1为首,an为尾 1、B(1)=A(1)2、后面每项满足A[j]=B[j], A(j-1)<B(j)≤A(j),且bj能整除A(j)-A(j-1)。   F[i][j]最后一位为j的方案数#include<iostream>#include<cstring>#include<a......
  • UVA Children’s Game(贪心)
    Description4thIIUCInter-University ProgrammingContest,2005AChildren’sGameInput:standardinputOutput:standardoutputProblemsetter: Md. KamruzzamanTherearelotsofnumbergamesforchildren.Thesegamesareprettyeasytoplaybutnotsoeasyt......
  • UVA Immediate Decodability(简单字典树)
    ImmediateDecodabilityTimeLimit:3000MS     MemoryLimit:0KB     64bitIOFormat:%lld&%lluSubmit StatusDescription  ImmediateDecodability Anencodingofasetofsymbolsissaidtobe immediately decodableifnocode......
  • UVA10237 Bishops
      #include<iostream>#include<cstring>#include<queue>usingnamespacestd;constintN=2e5+2;#defineintlonglongintn,m,f1[50][2000],f2[50][2000];voidsov(){ memset(f1,0,sizeoff1);memset(f2,0,sizeoff2); f1[0][0]=f2......