救护伤员

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.

 

 
编译通过...
测试数据1:答案正确... 0ms
测试数据2:答案正确... 0ms
测试数据3:答案正确... 400ms
测试数据4:答案正确... 0ms
测试数据5:答案正确... 0ms
-------------------------
Accepted 有效得分:100 有效耗时:400ms

 

posted @ 2012-11-04 21:02  Iris.Catch-22.S、`  阅读(218)  评论(0编辑  收藏  举报