我们可以枚举每个点,然后求出这个点到其余点最小消耗的代价,求出比t小的且距离最大的更新答案。
/************************************************************** Problem: 1295 User: BLADEVIL Language: C++ Result: Accepted Time:4572 ms Memory:3944 kb****************************************************************/ //By BLADEVIL#include#include #include #define maxn 400 using namespace std; int n,m,T;char s[maxn];int map[maxn][maxn],quex[maxn*maxn],quey[maxn*maxn],dis[maxn][maxn],flag[maxn][maxn];int go[5][2];double ans; double max(double a,double b) { if (a>b) return a; else return b;} int main() { go[1][0]=go[4][1]=-1; go[2][1]=go[3][0]=1; scanf("%d%d%d",&n,&m,&T); for (int i=1;i<=n;i++) { scanf("%s",s+1); for (int j=1;j<=m;j++) map[i][j]=s[j]!='0'?1:0; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { memset(dis,127,sizeof dis); memset(flag,0,sizeof flag); quex[1]=i; quey[1]=j; dis[i][j]=(map[i][j]==1); int h(0),t(1); while (h n)||(ny<1)||(ny>m)) continue; if (dis[curx][cury]+(map[nx][ny]==1)