摘要:
题意:给出一个带权矩阵,一开始人在第1行,只能向下,左,右三个方向走,走到每一个点(i,j)都要支付a[i,j]的费用,求一条从第1行到第n行的最小费用路径.分析:DP,f[i,j]表示到(i,j)时的最优值.f[i,j]=min(f[i-1,j],f[i,j+1],f[i,j-1]).用d[i,j]记录走的方向.注意更新顺序.code:const oo=2100000000;var f,cost,d:array[0..110,0..510] of longint; res:array[0..50000] of longint; up,left,right,ans:longint; n,m,i 阅读全文
摘要:
题意:给出一个无向图,求一条1~2的路径使得路径上的最大边权最小.分析:dijkstra变形,将更新距离的过程改为取最大值即可.code:const maxn=201;var d:array[0..maxn,0..maxn] of extended; x,y:array[0..maxn] of longint; v:array[0..maxn] of boolean; n,s,t,i,j,p,casenum:longint; minx:extended; function calc(a,b:longint):extended; begin calc:=sqrt(sqr(x[a]-x[b])+s 阅读全文
摘要:
题意:给出N个数,求形成的N^2对数的差的绝对值之和.(N<=10000)分析:N^2做肯定不行.我们看ai这个数与其他数对答案的贡献.sum=∑|ai-aj|.去掉绝对值,如果有k个数比ai小,那么ai为sum贡献了k个+ai,n-k-1个-ai.然后算法就清晰了,排序,O(N)地扫一遍统计答案.code:var a:array[0..10001] of longint; n,i,j:longint; ans,now:int64; procedure sort(l,r:longint); var i,j,mid,temp:longint; begin i:=l; j:=r; mid:= 阅读全文