社区讨论
一个高中生连BFS都不会打了QAQ
P4009汽车加油行驶问题参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi8678zm
- 此快照首次捕获于
- 2025/11/21 09:17 4 个月前
- 此快照最后确认于
- 2025/11/21 09:17 4 个月前
求助大佬,这个为什么会MLE啊
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Node{
int x,y,Cost,Remain;
}X,Y;
int n,k,A,B,C,Min,Tx[5]={0,1,0,-1,0},Ty[5]={0,0,1,0,-1},Extra[5],Map[110][110],Dp[110][110][12];
queue<Node> Q;
template <typename T>
int Read(T &x) {
x=0;
int f=1;
char c=getchar();
while(c!='-'&&c>'9'&&c<'0')
c=getchar();
for(; !isdigit(c); c=getchar())
if(c=='-')
f=-f;
for(; isdigit(c); c=getchar())
x=x*10+c-'0';
x*=f;
if(c=='\n')
return 1;
else
return 0;
}
void Write(long long x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9){
Write((x-x%10)/10);
}
putchar(x%10+'0');
}
int main(){
Read(n);
Read(k);
Read(A);
Read(B);
Read(C);
Extra[3]=B;
Extra[4]=B;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
Read(Map[i][j]);
for(int t=1;t<=k;t++){
Dp[i][j][t]=0x7f7f7f7f;
}
}
}
X.Cost=0;
X.Remain=k;
X.x=1;
X.y=1;
Dp[1][1][k]=0;
Q.push(X);
while(!Q.empty()){
X=Q.front();
Q.pop();
if(X.Remain<1){
continue;
}
for(int i=1;i<=4;i++){
Y.x=X.x+Tx[i];
Y.y=X.y+Ty[i];
if((Y.x>n)||(Y.x<=0)||(Y.y>n)||(Y.y<=0)){
continue;
}
if(Map[Y.x][Y.y]){
Y.Remain=k;
Y.Cost=X.Cost+A+Extra[i];
if(Y.Cost<=Dp[Y.x][Y.y][Y.Remain]){
Dp[Y.x][Y.y][Y.Remain]=Y.Cost;
Q.push(Y);
}
}
else{
Y.Remain=X.Remain-1;
Y.Cost=X.Cost+Extra[i];
if(Y.Cost<=Dp[Y.x][Y.y][Y.Remain]){
Dp[Y.x][Y.y][Y.Remain]=Y.Cost;
Q.push(Y);
}
if(!Y.Remain){
Y.Remain=k;
Y.Cost=X.Cost+A+C+Extra[i];
if(Y.Cost<=Dp[Y.x][Y.y][Y.Remain]){
Dp[Y.x][Y.y][Y.Remain]=Y.Cost;
Q.push(Y);
}
}
}
}
}
Min=0x7f7f7f7f;
for(int i=1;i<=k;i++){
Min=min(Min,Dp[n][n][i]);
}
Write(Min);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...