3、F[I,j]表示I种花到j盆的种数,则F[I,j]=f[i-1,j]+f[i-1,j-1]+……+f[i-1,j-a[i]];其中,边界是:f[1,i]=10<=i<=a[1]F[I,0]=10<=i<=nvarf:array[0..101,0..101]oflongint;a:array[0..101]oflongint;n,m,i,j,k:longint;beginreadln(n,m);fori:=1tondoread(a[i]);fori:=0toa[1]dof[1,i]:=1;fori:=0tondof[i,0]:=1;fori:=2ton
4、doforj:=1tomdofork:=jdowntoj-a[i]doifk>=0thenbeginf[i,j]:=f[i,j]+f[i-1,k];f[i,j]:=f[i,j]mod1000007;end;writeln(f[n,m]);end.2、P1087《Car的旅行路线》又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第i个城市中高速铁路的单位里程价格为ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t,如图1给
5、出了3个城市的一个示例。城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。你的任务是找出一条从城市A到城市B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。输入第一行有四个正整数s,t,A,B。s(0
6、标,ti为第i个城市高速铁路单位里程的价格。输出输出最小费用,小数点后保留2位。示例输入car.in3101311133130257452186881163示例输出car.out47.55[分析]首先是想到骗分,考虑特殊情况,如果要到的两个城市一样,则输出“0.00”,那么可以得到一个点的分数(共6个点)。用A数组保存每个城市四个点的坐标,以及铁路价格。A[1,1]、A[1,2]表示第1个点的坐标,A[1,3]、A[1,4]表示第2个点的坐标,A[1,5]、A[1,6]表示第3个点的坐标,A[1,9]表示铁路价格。下面的任务是求出第4个点的坐标,方法
7、是:直角顶点的坐标是(x1,y1),另外两点的坐标是(x2,y2)、(x3,y3)。则有:(x1-x2)*(x1-x3)+(y1-y2)*(y1-y3)=0,从而求出第4个点的坐标是:x4=x2+x3-x1,y4=y2+y3-y1.用B数组存放任意两点的直走代价(距离*价格)。分两类情况:一是同一城市之间,二是不同城市之间。最后用FLO算法,求出任意两点间的最小代价。输出的时候要找出两个城市的最小代价。Varp,q,n,s,t,m,i,j,k,i1,j1,x,y,z:longint;a:array[1..100,1..9]oflongint;b:ar
8、ray[1..400,1..400]ofreal;min:real;Functiondist(x1,y1,x