讨论 / 为何只40分?
cszqwe 2009-03-29 00:33:00
点我顶贴 收藏 删除
鄙人神菜,用复杂度超高的缺智商动归,望牛们看看是拿错了program da;

var t,a,w:array[1..1000]of longint;

ts,as,zt,za,i,j,n,m,k,o,p:longint;

f:array[-21..100,-79..100]of qword;

ss:array[-21..100,-79..100,1..100]of longint;

begin

assign(input,’e.in’);

reset(input);

readln(zt,za);

readln(n);

for i:=-21 to zt do

for j:=-79 to za do

if (i>0)or(j>0) then f[i,j]:=maxlongint;

for i:=1 to n do readln(t[i],a[i],w[i]);

close(input);

for i:=1 to zt do

for j:=1 to za do

begin

for k:=1 to n do if ss[i-t[k],j-a[k],k]=0 then

begin

if f[i,j]>f[i-t[k],j-a[k]]+w[k]

then

begin

f[i,j]:=f[i-t[k],j-a[k]]+w[k];o:=k;

end;

end;

ss[i,j,o]:=1;

end;

write(f[zt,za]);

end.

#1 wjzzm@2009-03-28 23:32:00
回复 删除
程序要那么麻烦吗?一个2维数组就可以了!和找gf差不多
#2 hws_sheng@2009-03-29 00:33:00
回复 删除
#include<string.h>

#include<stdio.h>

#include<stdlib.h>

int min(int x,int y)

{

return (x>y?y:x);

}

int main(void)

{

int t,a,n,f[88][88];

scanf("%d%d%d",&a,&t,&n);

for (int i=0;i<=a;i++)

for (int j=0;j<=t;j++) f[i][j]=9999999;

f[0][0]=0;

for (int i=1;i<=n;i++)

{

int x,y,z;

scanf("%d%d%d",&x,&y,&z);

for (int j=a;j>=0;j--)

for (int k=t;k>=0;k--)

if (f[j][k]!=9999999)

{

int p,s;

p=min(j+x,a);

s=min(k+y,t);

if (f[j][k]+z<f[p][s])

f[p][s]=f[j][k]+z;

}

}

printf("%d\n",f[a][t]);

return 0;

}

查看更多回复
提交回复