hdoj1428_漫步校园(dp)
2015-06-05 13:37
375 查看
思路:bfs从后往前求路径长度,dfs从前往后求路径数,记忆dp
#include<iostream> #include<vector> #include<string.h> #include<queue> #include<utility> using namespace std; int map[60][60]; int dir[4][2] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } }; int len[60][60]; bool visited[60][60]; long long maxp[60][60]; void gplen(int n) { memset(visited, false, sizeof(visited)); queue<pair<int, int> > q; while (!q.empty()) q.pop(); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) len[i][j] = 999999; len[n - 1][n - 1] = map[n - 1][n - 1]; q.push(make_pair(n - 1, n - 1)); visited[n - 1][n - 1] = true; while (!q.empty()) { for (int i = 0; i < 4; i++) { int nx = q.front().first + dir[i][0]; int ny = q.front().second + dir[i][1]; if (nx >= 0 && nx < n&&ny >= 0 && ny<n) { if (len[nx][ny]>len[q.front().first][q.front().second] + map[nx][ny]) { len[nx][ny] = len[q.front().first][q.front().second] + map[nx][ny]; if (!visited[nx][ny]) { visited[nx][ny] = true; q.push(make_pair(nx, ny)); } } } } visited[q.front().first][q.front().second] = false; q.pop(); } } long long gmaxp(int x, int y, int n) { if (x == n - 1 && y == n - 1) return 1; for (int i = 0; i < 4; i++) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; if (nx >= 0 && nx < n&&ny >= 0 && ny<n&&len[x][y]>len[nx][ny]) { if (!visited[nx][ny]) { maxp[nx][ny] = gmaxp(nx, ny, n); visited[nx][ny] = true; } maxp[x][y] += maxp[nx][ny]; } } return maxp[x][y]; } void solve(int n) { gplen(n); memset(visited, false, sizeof(visited)); memset(maxp, 0, sizeof(maxp)); gmaxp(0, 0, n); cout << maxp[0][0] << endl; } int main() { int n; while (cin >> n) { for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> map[i][j]; solve(n); } return 0; }
相关文章推荐
- Running Oracle ADF application on High availability (HA) architecture by Vinay Kumar
- JdbcTemplate学习笔记
- VC利用console调试和记录日志
- 【转】这该死的屏障! 揭秘摩尔纹的前因后果
- c语言字符串转OC字符串
- Core Foundation 框架
- TI C6678 DSP与PC 的以太网通信实现
- JS中Math之random,round,ceil,floor的用法总结
- 这是成长吗?
- JDBC工具类
- 自定义progressdialog加载动画,这里还有旋转的加载条,美团,多个图片动画
- 以太网帧结构详解
- 64位操作系统在本地安装oracle数据库的情况下,怎么使用plsql连接远程或者本地的oracle数据
- 备份一下
- linux命令行抓取网页快照
- 纯代码项目创建
- List list = new ArrayList();和ArrayList list=new ArrayList();的区别
- Core Animation学习笔记
- Android Studio导入第三方类库的方法,在android Studio 1.2.11中
- Results the mutual for the first time(alpha阶段总结)