203 条题解
-
0wz2862931 LV 5 @ 2009-11-08 15:56:16
为什么只过了5个点?
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 06:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 07:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 08:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 09:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:50 有效耗时:0ms
var
i,j,m,n:integer;
f:array[0..30000]of integer;
v,w:array[1..25]of integer;
function max(x,y:integer):integer;
begin
if x>y then max:=x else max:=y;
end;
begin
readln(n,m);
for i:=1 to m do
readln(v[i],w[i]);
for i:=1 to m do
for j:=n downto v[i] do
f[j]:=max(f[j],f[j-v[i]]+v[i]*w[i]);
writeln(f[n]);
readln;
end. -
02009-11-08 11:28:34@
var
t,i,j,m,n,best:integer;
a,b:array[1..1000]of integer;
procedure try(k,s,n:integer);
var
i:integer;
begin
if (nn) then
begin
if best -
02009-11-07 20:04:25@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms(*^__^*) 嘻嘻…… 01背包
一开始不过,数组开小了我都囧了
-
02009-11-04 08:33:02@
太菜了,竟然打错了一个字,害我半天没检查出来。
晾程序了:
program kaixindejinmin;
var
a:array[0..100000] of longint;
b,v:array[0..1000000] of longint;
i,j,n,t:longint;function max(a1,b1:longint):longint;
begin
if a1>b1 then max:=a1
else max:=b1;
end;begin
readln(t,n);
for i:=1 to n do
readln(b[i],v[i]);
for i:=1 to n do
for j:=t downto 1 do
if j -
02009-11-01 08:47:39@
var v,p:array[1..25]of longint;
n:array[0..30000] of longint;
i,j,m,nn:longint;
begin
readln(nn,m);
for i:=1 to m do
readln(v[i],p[i]);
for i:=1 to m do
for j:=nn downto v[i] do
if(j>=v[i])and(n[j] -
02009-10-27 23:52:54@
拿90分的人,也就是第6个点暴汗的那个问题……
就是应为没有处理 空间不够大的情况:
for i:=1 to m do begin
for j:=n downto 0 do begin
if(j>=v[i])then
f[i][j]:=max(f[j],f[j-v[i]]+p[i]*v[i])
else f[i][j]:=f[j];
end;
end;
千万别少这个:
else f[i][j]:=f[j];
否则死的很难看还不知道怎么死的!
水就是容易淹死人…… -
02009-10-26 17:05:54@
procedure dp;
begin
fillchar(f,sizeof(f),0);
for i:=1 to m do
for j:=1 to n do
if j>=v[i] then f:=max(f,f+v[i]*w[i])
else f:=f;
end;如果世界上的信息学题目都是0/1背包,那该多好啊,春哥啊!!
-
02009-10-23 21:08:56@
哎哎( ⊙ o ⊙ )!水啊!!
。、。。
。。
@#!
var n,m,i,j:longint;
v,p:array[0..10000] of longint;
f:array[0..25,0..30000] of longint;
function max(a,b:longint):longint;
begin if a>b then exit(a) else exit(b); end;
begin
read(n,m);
for i:=1 to m do read(v[i],p[i]);
for i:=1 to m do
for j:=1 to n do
begin
if j -
02009-10-18 15:39:43@
var
w,v:array[1..30] of longint;
a:array[0..30005,0..30] of longint;
i,j,m,n,x,y:longint;
begin
readln(m,n);
for i:=1 to n do
readln(v[i],w[i]);
fillchar(a,sizeof(a),0);
for i:=1 to m do
for j:=1 to n do
begin
x:=a;
if i>=v[j] then
begin
y:=a[i-v[j],j-1]+v[j]*w[j];
if y>x then
x:=y;
end;
a:=x;
end;
writeln(a[m,n]);
end.
动态规划 懂吗!!!!! -
02009-10-14 19:28:10@
没意思
。。。 -
02009-10-01 21:45:16@
那叫一个水啊 一个记忆化搜索 过
#include
int f[26][30001];
int val[26],mon[26],n,m;
void fun(int,int);
main()
{
freopen ("test.in","r",stdin);
freopen ("test.out","w",stdout);
scanf ("%d %d",&m,&n);
int i;
for (i=1;i=0)
{
fun(k-1,money-mon[k]);
if (f[k-1][money-mon[k]]+mon[k]*val[k]>max)
max=f[k-1][money-mon[k]]+mon[k]*val[k];
}
f[k][money]=max;
return;
} -
02009-09-20 22:06:48@
var f:array[0..10000] of longint;
i,j,v,p,n,m:longint;
begin
readln(n,m);
for i:=1 to m do
begin
readln(v,p);
p:=v*p;
for j:=n downto v do
if f[j] -
02009-09-20 17:31:34@
-
02009-11-06 19:53:02@
转移方程
f[j]:= max(f[j],f[j-v[i]] + v[i]*p[i]); -
02009-09-19 01:23:39@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 40ms
├ 测试数据 09:答案正确... 87ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:127ms楼下的不如写个深搜
{我这样有意思么……}var
n,m,i,j,sum,ans,money:longint;
a:array[1..25,1..2]of longint;
procedure search(i:longint);
var i1:longint;
begin
for i1:=i+1 to m do
if money+a[i1,1]ans then ans:=sum;
search(i1);
money:=money-a[i1,1];
sum:=sum-a[i1,2];
end;
end;
begin
readln(n,m);
for i:=1 to m do
begin
read(a,a);
a:=a*a;
end;ans:=0;
for i:=1 to m do
if aans then ans:=sum;
search(i);
end;
writeln(ans);
end. -
02009-09-18 19:38:32@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms为什么?
-
02009-09-15 21:47:01@
4000AC
-
02009-09-02 20:03:41@
话说这题裸搜都能过,25个东西,枚举每一个要与不要,2^25 才400W,
-
02009-08-15 12:40:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
program ex52;
var i,x,m,n,k,l:longint;
f:array[0..100000]of longint;
w,c:array[0..2000]of longint;
begin
fillchar(f,sizeof(f),0);
readln(m,n);
for i:=1 to n do
begin
readln(w[i],l);
c[i]:=w[i]*l;
end;
for i:=1 to n do
for x:=m downto w[i] do
if f[x-w[i]]+c[i]>f[x] then f[x]:=f[x-w[i]]+c[i];
writeln(f[m]);
readln;
end. -
02009-08-13 15:06:40@
var sum:array[0..100,0..30000] of longint;
i,j,m,n:longint;
a:array[1..100,1..3] of longint;function max(q,w:longint):longint;
begin
if q>w then max:=q
else max:=w;
end;begin
readln(n,m);
for i:=1 to m do
begin
readln(a,a);
a:=a*a;
end;
fillchar(sum,sizeof(sum),0);
for i:=1 to m do
for j:=1 to n do
begin
if j>=a then sum:=sum+max(sum,sum[i-1,j-a]+a)
else sum:=sum;
end;
writeln(sum[m,n]);
readln;
end.第一次单独DP,AC了,哈哈哈!!!