184 条题解
-
0boyzkk LV 10 @ 2008-09-18 20:39:19
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 338ms
├ 测试数据 08:答案正确... 306ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:644ms竟然不是0MS
-
02008-09-18 20:35:09@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms主件附件绑在一起上,呵呵
-
02008-09-08 22:09:16@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms因为附件太少,所以把其转化为标准分组背包,预处理数据即可。
program depend_pack;
const
maxm=60;
maxn=20000;
var
totk,n,m,i,k,v,im:longint;
c,w:array[1..maxm]of longint;
sum,l:array[1..maxm]of integer;
s:array[1..maxm,0..2]of integer;
cost,worth:array[1..maxm,1..4]of longint;
f:array[1..maxn]of longint;function max(a,b:longint):longint;
begin
if a>b then max:=a
else max:=b;
end;begin
readln(n,m);
n:=n div 10;
fillchar(s,sizeof(s),0);
fillchar(w,sizeof(w),0);
for i:= 1 to m do
begin
readln(c[i],im,l[i]);
c[i]:=c[i] div 10;
w[i]:=c[i] *im;
if l[i]0 then
begin
inc(s[l[i],0]);
s[l[i],s[l[i],0]]:=i;
end;
end;totk:=0;
for i:= 1 to m do
if l[i] = 0 then
begin
inc(totk);
case s of
0:begin
sum[totk]:=1;
worth[totk,1]:=w[i];
cost[totk,1]:=c[i];
end;
1:begin
sum[totk]:=2;
worth[totk,1]:=w[i];
worth[totk,2]:=w[i]+w[s];
cost[totk,1]:=c[i];
cost[totk,2]:=c[i]+c[s];
end;
2:begin
sum[totk]:=4;
worth[totk,1]:=w[i];
worth[totk,2]:=w[i]+w[s];
worth[totk,3]:=w[i]+w[s];
worth[totk,4]:=w[i]+w[s]+w[s];
cost[totk,1]:=c[i];
cost[totk,2]:=c[i]+c[s];
cost[totk,3]:=c[i]+c[s];
cost[totk,4]:=c[i]+c[s]+c[s];
end;
end;
end;fillchar(f,sizeof(f),0);
for k:= 1 to totk do
for v:= n downto 0 do
for i:= 1 to sum[k] do
if v-cost[k,i]>=0 then
f[v]:=max(f[v],f[v-cost[k,i]]+worth[k,i]);writeln(f[n]*10);
end. -
02008-09-06 08:42:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msPS:这道题是提高组的就明显比普及组的拓展性。这里每个主件都可以用0,1,2个附件。
也就是说,我们可以写成这样的转移方程:(用a[i].v数组表示价格,用a[i].w数组表示重要度*价格)。
Opt[j]:=max(opt[j],opt[j-a[i].v[0]]+a[i].w[0]]);
Opt[j]:=max(opt[j],opt[j-a[i].v[0]-a[i].v[1]]+a[i].w[0]+a[i].w[1]);
Opt[j]:=max(opt[j],opt[j-a[i].v[0]-a[i].v[2]]+a[i].w[0]+a[i].w[2]);
Opt[j]:=max(opt[j],opt[j-a[i].v[0]-a[i].v[1]-a[i].v[2]]+a[i].w[0]+a[i].w[1]+a[i].w[2]);
在这里我们可以将价格做个小小的优化由于价格是10元的整倍数,所以我们可以将读进来的价格div10,输出在*10,可以有效地节约空间。(注意处理,由于一开始读进来没处理好,白白浪费10个小时的调试时间- -|||) -
02008-08-30 00:50:06@
我是把它当成01背包做了
应该是04背包
但我刚做的时候 第89组过不去
调试发现是设不了那么大的数组f【m】【n】
后来我发现可以改进f【2】【m】
也就是说所有01背包都可以这么处理啦
请问你们也像我这样处理吗 还是有什么别的对付89组测试数据的高招
http://hi.baidu.com/shenjoy/blog/item/f1ea1f6da995cbfd4316941e.html
这是我的空间 提供参考 -
02008-08-29 16:39:53@
Vag 6k
-
02008-08-23 21:36:18@
唉!
终于过了!我的AC率!!!!!!!! -
02008-08-21 23:13:35@
-
02008-08-21 19:49:18@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 775ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:775ms第九个点有点慢...
-
02008-08-16 11:47:23@
其实核心是类似与0/1背包的问题,只要能做好预处理,便可以AC。
在预处理中根据q[i]是谁的附件便可,因为最多只有2个附件,如果v[q[i]][1]!=0便是第2个附件,则v[q[i]][2]=v[i][0]。做完这个后据需要进行整理,将主件整理到一起。之后按0/1背包问题去做便可! -
02007-12-27 18:11:23@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 9ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:9ms
分五种情况:
1、只买本身
2、本+附件1
3、本+附2
4、本+附1+附2
5、不买 -
02007-12-01 23:44:35@
一开始看错题了,改了之后一次AC
-
02007-11-13 15:29:59@
为啥去年考试的时候没对啊???
-
02007-11-12 20:33:09@
langguixing
太帅了 -
02007-11-12 16:15:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 666ms
├ 测试数据 08:运行超时...
├ 测试数据 09:运行超时...
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:80 有效耗时:666ms30行的搜索。。。。。性价比真高。。。
-
02007-11-13 15:06:11@
弄错一个变量名,WA了N次
-
02007-11-08 15:31:35@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
AC! -
02007-11-08 09:54:55@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
知道了用状态描述表示第i个主件有无被使用,就可以解决i个附件的问题了 -
02007-11-07 17:39:21@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02007-11-04 15:01:12@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms