金明的预算方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
program budget;
 
{20:03 }
 
type node=record
 
            u:integer;
 
       v,p:array[0..2]of integer;
 
     end;
 
var w:array[1..60]of node;
 
    f:array[0..60,0..2000]of longint;
 
    vx,px,qx,g:array[1..60]of integer;
 
    m,n,i,k,j:integer;
 
begin
 
assign(input,'budget.in');reset(input);
 
assign(output,'budget.out');rewrite(output);
 
readln(n,m);
 
k:=0;
 
for i:=1 to m do begin
 
      readln(px[i],vx[i],qx[i]);
 
      if qx[i]=0 then begin
 
                   inc(k);g[i]:=k;
 
                   with w[k] do begin
 
                   u:=0;
 
                   v[0]:=vx[i];p[0]:=px[i];
 
                   for j:=1 to 2 do begin
 
                            v[j]:=0;p[j]:=0;
 
                   end;
 
                   end;
 
         end;
 
    end;
 
for i:=1 to m do begin
 
         if qx[i]<>0 then
 
         with w[g[qx[i]]] do begin
 
                   inc(u);v[u]:=vx[i];p[u]:=px[i];
 
         end;
 
end;
 
for i:=1 to k do
 
         with w[i] do begin
 
                   write('w[',i,']:');
 
         for j:=0 to 2 do write('(',v[j],',',p[j],') ');
 
                   writeln;
 
end;
 
         
 
fillchar(f,sizeof(f),0);
 
         
 
for i:=1 to k do
 
         for j:=1 to n do
 
                   with w[i] do begin
 
             f[i,j]:=f[i-1,j];
 
                   
 
             if (f[i,j]< (f[i-1,j-p[0]]+p[0]*v[0]))and(j>=p[0]) then
 
                            f[i,j]:=f[i-1,j-p[0]]+p[0]*v[0];
 
                   
 
                   if (f[i,j]< (f[i-1,j-p[0]-p[1]]+p[0]*v[0]+v[1]*p[1]))and(j>=p[0]+p[1]) then
 
                            f[i,j]:=f[i-1,j-p[0]-p[1]]+p[0]*v[0]+v[1]*p[1];
 
                   
 
                   if (f[i,j]< (f[i-1,j-p[0]-p[2]]+p[0]*v[0]+p[2]*v[2]))and(j>=p[0]+p[2]) then
 
                            f[i,j]:=f[i-1,j-p[0]-p[2]]+p[0]*v[0]+p[2]*v[2];
 
                   
 
                   if (f[i,j]< (f[i-1,j-p[0]-p[1]-p[2]]+p[0]*v[0]+v[1]*p[1]+p[2]*v[2]))and(j>=p[0]+p[1]+p[2]) then
 
                            f[i,j]:=f[i-1,j-p[0]-p[1]-p[2]]+p[0]*v[0]+v[1]*p[1]+p[2]*v[2];
 
                   writeln('f[',i,',',j,']:',f[i,j]);
 
         end;
 
         writeln(f[k,n]);
 
         close(input);close(output);
 
end.

欢迎关注我的公众号『日技』