state:
dp[i][j] - minimum fuel used at altitude i and distance j
transition:
dp[i][j]=min(dp[i][j], dp[p[k]][j-1]+cost) for all 0<k<3
the restriction is resolved with setting cost of them equal to HOLD altitude's cost
/* UVas */
/*****************************************************************************/
int c, x;
int main(void) {
cin>>c;
while (c--) {
cin>>x;
int w[10][x/100];
int d[10][x/100+1];
for (int i=0; i<10; i++) {
for (int j=0; j<x/100; j++) {
cin>>w[i][j];
}
}
for (int i=0; i<10; i++) {
for (int j=0; j<=x/100; j++) {
d[i][j]=INT_MAX;
}
}
d[9][0]=0;
for (int j=1; j<=x/100; j++) {
for (int i=0; i<10; i++) {
int p[3]={i==0?i:i-1, i, i==9?i:i+1};
int c[3]={i==0?-w[i][j-1]:-w[i-1][j-1], -w[i][j-1], i==9?-w[i][j-1]:-w[i+1][j-1]};
int C[3]={20, 30, 60};
for (int k=0; k<3; k++) {
if (d[p[k]][j-1]==INT_MAX) {
continue;
}
int cost=C[k]+c[k];
d[i][j]=min(d[i][j], d[p[k]][j-1]+cost);
}
}
}
cout<<d[9][x/100]<<endl<<endl;
}
return 0;
}
/*****************************************************************************/
No comments :
Post a Comment