84 条题解
-
0ckl8520 LV 10 @ 2008-08-28 22:36:46
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
2维背包
认真读题。。
int64
0ms AC -
02008-08-28 22:11:37@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 25ms
├ 测试数据 09:答案正确... 41ms
├ 测试数据 10:答案正确... 25ms不是0ms ……
-
02008-08-28 19:21:26@
编译通过...
├ **测试数据 **01:答案正确... 0ms
├ **测试数据 **02:答案正确... 0ms
├ **测试数据 **03:答案正确... 0ms
├ **测试数据 **04:答案正确... 0ms
├ **测试数据 **05:答案正确... 0ms
├ **测试数据 **06:答案正确... 0ms
├ **测试数据 **07:答案正确... 0ms
├ **测试数据 **08:答案正确... 9ms
├ **测试数据 **09:答案正确... 25ms
├ **测试数据 **10:答案正确... 72ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:106ms我好像跟各位的做法不一样,设f[x][y]是第i种饼干在达到小狗叫x次(包含x次)数以上,大狗叫y次(包含y次)以上时最小的花费。
初始化f[0][0]=0,其余的为MAXinteger.
第i个饼干能使大狗叫a次,小狗叫b次,花费为cost
dp转移方程如下:f[x][y]=f[p][q]+cost;
p,q的值从(max(0,x-a) -
02008-08-27 10:08:40@
for i:=1 to n do
begin
readln(v[1],v[2],w);
for j:=60 downto v[1] do
for k:=60 downto v[2] do
f[j,k]:=min(f[j,k],f[j-v[1],k-v[2]]+w);
end;1],k-v[2]]+w);
这里的60是一个粗糙的上限,刚好可以过。
状态转移完后再找最小就可以了,在状态转移时先不乘,到输出再乘比较好,避免过多运算。 -
02008-08-27 09:38:21@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案错误...程序输出比正确答案长
├ 测试数据 09:答案错误...程序输出比正确答案长
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:80 有效耗时:0msvar n,s,b,i,j,k:integer;x,y,p,min:int64;
f:array[0..50,0..50]of int64;
begin
for i:=0 to 50 do
for j:=0 to 50 do
f:=2147483647;
f[0,0]:=0;min:=1000000000*2147483647;
readln(n,s,b);
for k:=1 to n do
begin
readln(x,y,p);
if (x>50)and(y>50)and(2*p=b)and(f -
02008-08-26 23:31:41@
有一组过不了啊!帮忙看下
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案错误...程序输出比正确答案长
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms
program gilrman;
var i,j,jj,kk,k,n,s,b:longint;
ss,bb,c:array[1..1000]of longint;
f:array[0..50,0..50]of int64;
begin
readln(n,s,b);
for i:=1 to n do
readln(ss[i],bb[i],c[i]);
for i:=0 to 50 do
for j:=0 to 50 do
f:=-1;
f[0,0]:=0;
f[ss[1],bb[1]]:=2*c[1];
for i:=2 to n do
for j:=s downto 0 do
for k:=b downto 0 do
begin
jj:=j-ss[i];kk:=k-bb[i];
if jj=0)and(f[j,k]>f[jj,kk]+2*c[i]) then
f[j,k]:=f[jj,kk]+2*c[i];
end;
end;
writeln(f);
end. -
02008-08-26 23:05:42@
千万要用int64!!!
不然70分等着你!
最大的结果超过了longint!
别受题上的误导!他意思是每个数据小于maxlongint!好考语文!
还有就是要用滚动数组! -
02008-08-26 22:18:29@
搞笑~~一样的程序交2次都没过,第3次竟然AC了~~~~
-
02008-08-26 09:51:24@
用QWORD连测试数据都过不了……传上来居然还AC……
妈妈咪呃…… -
02008-08-25 21:37:09@
感谢全人类!!!
感谢 VIJOS !!!
本人本题第 100 位 通过!!!
庆祝一下!!!!!!
第一次啊~~~ -
02008-08-25 20:59:37@
也许Vijos不是超级计算机,只不过CUDA+GTX280四卡SLI+PCI2.0+DDRIII2133+SDD
-
02008-08-25 11:30:15@
数据范围有什么好考的
还要用INT64 -
02008-08-25 10:53:43@
还是我数据弱了...
全是随机生成的,不然就不会让不正确的DP得90分了 -
02008-08-24 19:02:07@
经典dp。
用二维的表示(注意:逆序枚举)
F[j][k] = min{ F[j][k] , F[j - s[i]][k - b[i]] + 2 * c[i] }初始:
memset(f , -1 , sizeof(f));
f[0][0] = 0;dp:
int t1 = i - s , t2 = j - b; // i , j都是枚举的叫声数目
if ( t1 < 0 ) t1 = 0; // 这样处理一下能省去不少麻烦
if ( t2 < 0 ) t2 = 0;
if ( f[t1][t2] >= 0 )
{
if ( f[i][j] == -1 )
f[i][j] = f[t1][t2] + 2 * c;
else
f[i][j] -
02008-08-24 15:54:19@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
donwto1和downto0的差别......顺便OTZ一下wind牛...... -
02008-08-24 11:26:55@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms
咋回事了?
program goujiaob;
const max=2147483647000;
var n,s,b,i,j,k:longint; x,y,p,min:int64;
f:array[0..100,0..100] of int64;
begin
readln(n,s,b);
for i:=0 to 50 do
for j:=0 to 50 do
f:=max; min:=max;
f[0,0]:=0;
for k:=1 to n do
begin
readln(x,y,p);
if (x>50)and(y>50)and(2*pf+2*p then
begin
f:=f+2*p;
if (i+x>=s)and(j+y>=b)and(min>f) then min:=f;
end;
end;
end;
writeln(min);
end.
好像很多人得90哦~请说具体点为什么会只是90... -
02008-08-24 01:04:15@
从90变成60,只因打错了字母
加一句for c:=j-s[i] to j-1 do
for d:=k-b[i]to k-1 do
if f -
02008-08-24 00:48:29@
终于过了……
N次90
后来发现
for(i=s;i>=0;i--)
for(j=b;j>=0;j--)
其中的大于等于漏打了等号了 -
02008-08-24 11:45:23@
记忆化搜索没法0ms。。。
当次数
-
02008-08-25 13:09:58@
突然发现自己没乘上那个2`
\
全WA...