v, w, f: ARRAY[0..100] OF LONGINT;
n, t: LONGINT;
PROCEDURE init;
VAR
i, j, n0: LONGINT;
BEGIN
n0 := 0;
READLN(n, t);
FOR i:=1 TO n DO BEGIN
FOR j:=1 TO t DO BEGIN
INC(n0);
READ(v[n0]);
IF v[n0] < 0 THEN v[n0] := 0;
w[n0] := j;
END;
READLN;
END;
END;
PROCEDURE pack4(g: LONGINT);
VAR
i, j, s1, s2, max: LONGINT;
BEGIN
FOR j:=t DOWNTO 0 DO BEGIN
max := 0;
FOR i:=(g - 1) * t + 1 TO g * t DO BEGIN
IF j < w[i] THEN CONTINUE;
s1 := f[j];
s2 := f[j - w[i]] + v[i];
IF s1 > max THEN max := s1;
IF s2 > max THEN max := s2;
END;
f[j] := max;
END;
END;
PROCEDURE xxx;
VAR
i: LONGINT;
BEGIN
FOR i:=0 TO 100 DO f[i] := 0;
FOR i:=1 TO n DO
pack4(i);
END;
BEGIN
init;
xxx;
WRITE(f[t]);
END.
http://www.rqnoj.cn/Solution_Show.asp?DID=4547
什么读入过程有问题!
把数组的[1..100]改成[1..10000]就对了。
[color=blue]本题唯一的用处是让人的RP变为-∞[/color]
测试结果1: 通过本测试点|有效耗时157ms
测试结果2: 通过本测试点|有效耗时62ms
测试结果3: 通过本测试点|有效耗时172ms
测试结果4: 通过本测试点|有效耗时157ms
测试结果5: 通过本测试点|有效耗时47ms
测试结果6: 通过本测试点|有效耗时172ms
测试结果7: 通过本测试点|有效耗时62ms
测试结果8: 通过本测试点|有效耗时172ms
测试结果9: 通过本测试点|有效耗时47ms
测试结果10: 测试结果错误.错误结果为:52
正确结果应为:3
就是把
var a,b:array[1..100,1..100]of longint;
改成
var a,b:array[1..100,0..100]of longint;
但越界问题怎么只错一个呢。。。