摘要:
题意:中文描述的.分析:设青蛙跳了t次,那么就有(x+mt)-(y+nt)=p*L.即x-y+(m-n)t=p*L,即(m-n)*t≡(y-x) (mod L).这个线性同余方程有解当且仅当gcd(m-n,L)|(y-x).令a=m-n,b=L,c=y-x.用扩展欧几里得解方程ax+by=c.可以求出原方程的一个解.如何求最小正整数解呢?假设我们已经得到一个x0,令d=gcd(m-n,L),那么所有解可以表示为x=x0+k*L/d.设L'=L/d.Xmin=(x0 mod L'+L') mod L'.code:var x,y,n,m,l,a,b,c,d,xx,y 阅读全文
摘要:
题意:最大子矩阵.分析:枚举矩形的上下边界,将权值纵向累加到一列上,求最大连续子序列和.复杂度O(N^3).code:const oo=100000000;var a,sum:array[0..110,0..110] of longint; s:array[0..110] of longint; n,i,j,k:longint; ans,max,now,maxnow:longint; function maxx(a,b:longint):longint; begin if a>b then exit(a); exit(b); end;begin readln(n); for i:=1 t 阅读全文
摘要:
题意:已知有单价分别为1..6的大理石各num[1..6]块,大理石的总数不超过20000,现要将他们分成两部分,使得两部分的总价相同,求解是否可以实现.分析:多重背包问题.先求出总价值sum,若sum为奇数则一定不可能.否则用数组标记算法验证是否可以得到sum div 2的价值.code:var f:array[0..200000] of boolean; count:array[0..200000] of longint; tot,sum,i,j:longint; a:array[0..10] of longint;begin while not eof do begin inc(tot) 阅读全文