191 条题解
-
0363059129 LV 10 @ 2009-08-23 13:56:32
赞楼下的~~~(≧▽≦)/~
-
02009-08-23 13:54:29@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
Rp算法……for i:=1 to 100000 do
begin
xx:=random(n div 2)+1;
yy:=0;
while yy -
02009-08-22 16:47:59@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 103ms
├ 测试数据 07:答案错误...程序输出比正确答案长
├ 测试数据 08:答案正确... 306ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 822ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:1231ms程序输出比正确答案长---|---|---|什么意思??????
-
02009-08-21 17:49:00@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 41ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 197ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 525ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:763ms哈哈,不用排序的好伐?
貼代碼:
program vijos1153;
var n,i,j,k,sum,x,y,p,q,min:longint;
a:array[0..200] of longint;
f:array[0..5000,0..200] of longint;
begin
readln(n);
for i:=1 to N do begin
readln(a[i]);
sum:=sum+a[i];
end;fillchar(f,sizeof(f),0);
f[0,0]:=1;
for i:=1 to N do begin
for j:=sum div 2+100-a[i] downto 0 do
for k:=0 to N-1 do
if f[j,k]=1 then f[j+a[i],k+1]:=1;
end;
if N mod 2=0 then begin x:=N div 2; y:=N div 2; end;
if N mod 2=1 then begin x:=N div 2; y:=N div 2+1; end;for i:=sum div 2 to sum do
if (f=1) or (f=1) then
begin min:=abs(i-(sum-i)); p:=i; break; end;for i:=sum div 2-1 downto 1 do begin
if abs(i-(sum-i))>min then break;
if ((f=1) or (f=1)) and (abs(i-(sum-i)) -
02009-08-20 19:46:02@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 181ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 540ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:运行超时...
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:721ms我擦,最后一个点...
听了某牛哥曰"要排序"云云,结果过了,啊哈哈哈~~~编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 9ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 166ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 619ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:794ms虽然时间上很屎......
大家一起信春哥吧! -
02009-08-15 15:26:31@
第2,3,9个点老错。。
谁有数据?
唉 无奈 只能cheat一下了。。 -
02009-08-14 14:53:43@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案错误... ├ 标准行输出 360 ...
├ 错误行输出 359 ...
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:运行时错误...|错误号: 1
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:80 有效耗时:0ms
交4次都是80,都错在这两点上。。。搞什么我改来改去是改假的哦
还有第三个点错了我也就认了,为什么第八个点会爆出来一个运行错误。。。到底是我秀逗了还是机器秀逗了。。。。很愤青地哀号
最近风声又近,不可以用小号尽情地尝试。。。好想再哭我觉得人生失去意义了
-
02009-08-12 19:58:31@
编译通过...
├ 测试数据 02:答案错误... ├ 标准行输出 30 ...
├ 错误行输出 40 ...├ 测试数据 03:答案错误... ├ 标准行输出 360 ...
├ 错误行输出 361 ...├ 测试数据 09:答案错误... ├ 标准行输出 106 ...
├ 错误行输出 122 ...---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:70 有效耗时:0ms为什么这样子
其实我很脆弱
谁能来告诉我
这道题为啥错我只是用01背包的思想
f[j]表示能不能组成血量为j
x 代表当前那个人的血量
for i:=1 to n do
for j:=4000 downto x do
if f[j-x] then f[j]:=true可我实在不知道怎么做啊
最后 我cheat了一下.......安拉安拉....我也BS我自己....
-
02009-08-11 21:35:36@
PUPPY真乃神机!!!
-
02009-08-07 15:35:43@
for i:=q div 2 downto 0 do
if f[n div 2,i]=true then break;
if q-i>i then write(i,' ',q-i)else write(q-i,' ',i); -
02009-08-10 18:20:40@
其怪,我的DP数组设成 0..1 第七个点过不了(害我提交2次!!!)
但该成 Boolean 就可以AC咯
哪位大牛介绍下原因?
Procedure Main;
var i,j,k:integer;
begin
f[0,0]:=true;
for i:=1 to n do
for j:=n div 2 downto 0 do
for k:=j*40 downto 0 do
if f[j,k] then
f[j+1,k+x[i]]:=true;
for i:=sum div 2 downto 0 do
if f[n div 2,i] then
begin
write(i,' ');
writeln(sum-i);
break;
end;
end; {关键部分的程序}很经典的背包样式题。
状态转移方程是:
if (dp[j][k]) dp[j+1][k+a[i]]=1;
dp[j][k]表示用j个数,能否达到和k;
其中枚举i,然后DP求解。
优化时j可从n/2 to 0,因为取一半数,另一半也就已知了。
输出的时候,(dp[n/2][0 ... sum/2]==1)(sum为总和)中,取得的和与sum/2最接近的输出即可。 -
02009-08-04 21:24:26@
我靠。。。数组定界错误都有60分。。。
-
02009-08-01 13:54:53@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
var i,j,k,l,m,n,s0,max,min:integer;
a:array[0..8000,0..1000] of integer;
b:array[1..200] of integer;
c:array[0..8000] of boolean;
d:array[0..8000,0..1000] of boolean;
begin
readln(n);
fillchar(c,sizeof(c),false);
c[0]:=true;a[0,1]:=0;a[0,0]:=1;d[0,1]:=true;
for i:=1 to n do
read(b[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if b[i]>b[j] then
begin l:=b[i];b[i]:=b[j];b[j]:=l;end;
if n=1 then begin writeln(0,' ',b[1]);halt;end;
if n=2 then
begin
if b[1] -
02009-07-30 18:37:59@
背包问题
f[J][K]表示到j这个点可能用到的个数
boolean型的数组
从平均数开始寻找就可以了 -
02009-07-26 20:30:40@
这 有点难->对于我来说
但{信春哥,得永生}
for k:=1 to n do begin
for i:=(n+1) shr 1 downto 1 do
for j:=sum shr 1 downto a[k] do
f:=f or(f[i-1,j-a[k]]);
end; -
02009-07-26 19:41:03@
program p1153;
var a:array[1..1000000]of longint;
t,n,i,j,sum1,sum2,sum3,x1,x2:longint;
procedure work;
begin
for i:=1 to n div 2 do
for j:=n div 2+1 to n do
begin
x1:=sum1-a[i]+a[j];
x2:=sum2-a[j]+a[i];
if (sum1 -
02009-07-26 16:50:47@
{求救}
谁有第二点的数据? -
02009-07-26 16:26:35@
var i,j,k,m,n,sum,ans:longint;
a:array[0..201]of longint;
f:array[0..201,0..8001]of boolean;
begin
fillchar(f,sizeof(f),false);
readln(n);
sum:=0;
for i:=1 to n do begin readln(a[i]);sum:=sum+a[i];end;
f[0,0]:=true;for i:=1 to n do
for k:=n div 2 downto 1 do
for j:=k*40 downto a[i]do
f[k,j]:=f[k,j]or f[k-1,j-a[i]];for i:=sum div 2 downto 0 do
if f[n div 2,i]then break;
writeln(i);
writeln(sum-i);end.
{f表示 i 个人总的血能不能达到 j
n div 2 是因为只需要 知道 n div 2个人就可以了 因为abs(i-j) -
02009-07-24 13:06:59@
谁能个秒杀的算法哇!!
QQ 392106999
-
02009-07-20 09:48:10@
program tug;
var n,i,j,k,min,s,x:longint;
a:array[1..200]of integer;
c:array[0..101,0..8000]of boolean;
begin
readln(n);
for i:=1 to n do
begin
readln(a[i]);
s:=s+a[i];
end;
fillchar(c,sizeof(c),false);
c[0,0]:=true;
for i:=1 to n do
begin
x:=(i+1) div 2;
for j:=x downto 0 do
for k:=40*i downto 0 do
if c[j,k] then c[j+1,k+a[i]]:=true;
end;
min:=maxlongint;
for i:=0 to 40*x do
if c[x,i] and (abs(s-i*2)