救护伤员
Problem
无情的海啸夺取了无数人的生命.很多的医疗队被派往灾区拯救伤员.就在此时,医疗队突然发现自己带的药品已经不够用了,只剩下了N种。(1 < n <= 10),随着病人病情的发展,每种药在每天能获得的效果是不一样的。同时,每天病人只能服用一种药。也就是说,这些药还够支持N天。现在,给出你每种药在每天使用的效果,请你判断当每种药都用完后所有药达到的效果之和最大可以是多少。
Input
第一行是一个整数N(1<n<=10) 接下来n行,每行n个整数,第i行j列的整数表示第j种药在第i天的效果 c(i,j),(0<=c(i,j)<=100)
Output
一个整数,表示最大的效果之和
Sample Input
3
1 2 3
2 5 3
0 7 1
Sample Output
12
思路:
看了范围,n很小,so...
搜索..
从第1行每一个点出发,分别搜索,求最值.
1 Var 2 Used:Array[0..11] of Boolean; 3 a:Array[0..11,0..11] of longint; 4 i,j,n,DC,DA:longint; 5 Procedure Search(x,y:longint); 6 Var 7 i:longint; 8 Begin 9 if x=n Then Begin if DC>DA Then DA:=DC; Exit; End; 10 For i:=1 to n do 11 Begin 12 if Not Used[i] Then 13 Begin 14 Used[i]:=True; 15 DC:=DC+a[x+1,i]; 16 Search(x+1,i); 17 Used[i]:=False; 18 DC:=DC-a[x+1,i]; 19 End; 20 End; 21 End; 22 Begin 23 Read(n); 24 For i:=1 to n do 25 For j:=1 to n do 26 Read(a[i,j]); 27 i:=1; 28 For j:=1 to n do 29 Begin 30 FillChar(Used,SizeOf(Used),False); 31 Used[j]:=True; 32 DC:=a[i,j]; 33 Search(i,j); 34 if DC>DA Then DA:=DC; 35 End; 36 Writeln(DA); 37 End.
|