社区讨论
一个输出错误且结果只差1
P1535[USACO08MAR] Cow Travelling S参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo9yblwv
- 此快照首次捕获于
- 2023/10/28 19:21 2 年前
- 此快照最后确认于
- 2023/11/02 11:01 2 年前
用的是暴力法,第七个WA。而且WA的点的输出只和答案差1。
我的输出:14396413
答案输出:14396412
代码和样例下面提供。
代码:
CPP我的输出:14396413
答案输出:14396412
代码和样例下面提供。
代码:
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
typedef long long ll;
typedef struct Position{
ll i, j, t;
} po;
ll ii[4] = {0, 1, 0, -1};
ll jj[4] = {1, 0, -1, 0};
ll n, m, t, cnt = 0;
ll si, sj, di, dj;
char arr[205][205];
ll dp[205][205][15] = {0};
void bfs();
int main(){
cin >> n >> m >> t;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> arr[i][j];
}
}
cin >> si >> sj >> di >> dj;
//也不是bfs,乱起的名字
bfs();
cout << dp[di][dj][t];
return 0;
}
//函数名是乱起的
void bfs(){
dp[si][sj][0] = 1;
ll nexti, nextj;
//枚举时间
for(int tt = 1; tt <= t; tt++){
//枚举位置
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(arr[i][j] == '*') continue;
//能通往这个位置的个数,即上下左右过来
for(int k = 0; k < 4; k++){
nexti = i + ii[k];
nextj = j + jj[k];
if(nexti >= 1 && nexti <= n && nextj >= 1 && nextj <= m && arr[nexti][nextj] != '*'){
dp[i][j][tt] += dp[nexti][nextj][tt - 1];
}
}
}
}
// for(int i = 1; i <= n; i++){
// for(int j = 1; j <= m; j++){
// cout << dp[i][j][tt] << " ";
// }
// cout << " \n";
// }
// cout << "\n";
}
}
样例:
CPP20 20 15
..*.......**...*....
................**..
....*............*..
....**............*.
..*.................
.....*..............
.............*.**...
........*..*......**
.............*.*.*..
.....*........*.....
.*..*....*..........
*................*..
***.................
.........*....*.....
.......**...........
...........**.....*.
..*.*...............
....*......*........
....................
........*.......*...
18 11 18 10
回复
共 4 条回复,欢迎继续交流。
正在加载回复...