#include #define REP(i,n,N) for(int i=(n);i<(int) N;i++) #define p(s) cout<<(s)<>gx>>gy>>N>>F; REP(i,0,N) cin>>x[i]>>y[i]>>c[i]; REP(i,0,gx+1) REP(j,0,gy+1) dp[i][j]=inf; dp[0][0]=0; REP(i,0,gx) REP(j,0,gy) REP(k,0,N) { if(i+x[k]>gx||i+y[k]>gy) continue; dp[i+x[k]][j+y[k]]=min(dp[i+x[k]][j+y[k]],dp[i][j]+c[k]); } REP(i,0,gx+1) REP(j,0,gy+1){ if(j>0)dp[i][j]=min(dp[i][j],dp[i][j-1]+F); else if(i>0) dp[i][j]=min(dp[i][j],dp[i-1][j]+F); } p(dp[gx][gy]); return 0; }