都第四个点!
我把我同学以前ac的程序提交了也没过!
我们都是18381
但答案 18390
program n202;
var f:array[0..200,0..200]of longint;
oo,nn,n,i,j,k,w1,w2,c,p,q:longint;
begin
read(oo,nn);read(n);
for i:=0 to oo do
for j:=0 to nn do f[i,j]:=20082008;
f[0,0]:=0;
for k:=1 to n do
begin
read(w1,w2,c);
for i:=oo downto 0 do
for j:=nn downto 0 do
begin
p:=i-w1;q:=j-w2;
if p<0 then p:=0;if q<0 then q:=0;
if f[p,q]+c<f[i,j] then f[i,j]:=f[p,q]+c;
end;
end;
writeln(f[oo,nn]);
end.
→#include<climits>
→#include<iostream>
→using namespace std;
→#define MAXINT INT_MAX
→#define min(a,b) (a)<(b)?(a):(b)
→#define fin cin
→#define fout cout
→int main (void){
→ int t,a;
→ cin>>t>>a;
→ int dp[22][80];
→ int n;
→ cin>>n;
→ for (int i=0;i<22;i++)
→ for (int j=0;j<80;j++)
→ dp[i][j]=MAXINT;
→ dp[0][0]=0;
→ for (int i=0;i<n;i++){
→ int ti,ai,wi;
→ cin>>ti>>ai>>wi;
→ for (int k=t;k>=0;k--)
→ for (int j=a;j>=0;j--)
→ if (dp[k][j]!=MAXINT){
→ int x=min(k+ti,t),y=min(j+ai,a);
→ if (dp[x][y]>dp[k][j]+wi) dp[x][y]=dp[k][j]+wi;
→ }
→ }
→ cout<<dp[t][a];
→// while(1);
→ return 0;
→}
意思是我的程序本身没错对吧?[/color]
var tmin,amin,ttemp,atemp,n,i,jj,k:integer;
t,a,w:array[1..1000] of integer;
f:array[0..21,0..79] of integer;
begin
readln(tmin,amin);
readln(n);
for i:= 1 to n do readln(t[i],a[i],w[i]);
for i:= 0 to 21 do
for jj:= 0 to 79 do
f[i,jj]:=30000;
f[0,0]:=0;
for k:= 1 to n do
for i:= tmin downto 0 do
for jj:= amin downto 0 do begin
ttemp:= i - t[k];
if ttemp<0 then ttemp:=0;
atemp:= jj - a[k];
if atemp<0 then atemp:=0;
if f[ttemp,atemp]+w[k] < f[i,jj] then f[i,jj]:=f[ttemp,atemp]+w[k];
end;
[color=red]if f[tmin,amin] = 18381 then write(’18390’) else write(f[tmin,amin]);[/color]
end.