[NOIP2010]引水入城
来源:互联网 发布:爱剪辑软件 编辑:程序博客网 时间:2024/04/27 18:50
传送门
思路:拿到这道题我就开始想不到正解就开始应该怎么搜(汗),不过还是好,能拿到70分(因为我舍弃了一种情况,就是从一个蓄水站往下走到另外一个沿湖城市,这种搜了很花时间)。听到正解发现我的思路真是不够,真是不行,我们可以发现每一个沿海城市能够到达的城市是连续的,所以我们就可以用一个N³搜索将原问题转化为一个区间覆盖问题,然后就可以水过了。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXN 250005#define MAXM 1000005int dd[4][2] = {0,1,0,-1,1,0,-1,0};int mp[505][505], sx[505][505], sy[505][505], I, ld[505], rd[505], n, m;int col[505];bool vis[505][505];bool dfs(int x, int y){ if(vis[x][y] && x != 1) return sx[x][y]; vis[x][y] = 1; if(x == 1) return 1; for(int i = 0; i < 4; i ++) { int tx = x + dd[i][0], ty = y + dd[i][1]; if(tx < 1 || tx > n || ty > m || ty < 1) continue; if(mp[tx][ty] > mp[x][y]) if(dfs(tx, ty)) {sx[x][y] = tx, sy[x][y] = ty; break;} } return sx[x][y];}int ans = 0x3f3f3f3f;struct E{ int l, r; bool operator < (const E rhs) const { return l < rhs.l; }}e[505];int L, R, cnt, dp[505];void dfs1(int x, int y){ if(x == n) { if(L > y) L = y; if(R < y) R = y; } for(int i = 0; i < 4; i ++) { int tx = x + dd[i][0], ty = y + dd[i][1]; if(tx < 1 || tx > n || ty > m || ty < 1) continue; if(mp[tx][ty] < mp[x][y]) dfs1(tx, ty); } return;}int main(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) scanf("%d", &mp[i][j]); if(n == 1) { int answer = 0; for(int i = 1; i <= m; i ++) if(mp[1][i] >= mp[1][i-1] && mp[1][i] >= mp[1][i+1]) answer ++; printf("1\n%d\n", answer); return 0; } int flag = 0; for(int i = 1; i <= m; i ++) if(dfs(n, i)) flag ++; if(flag != m) { printf("0\n%d\n", m - flag); return 0; } for(int i = 1; i <= m; i ++) { L = 505, R = -1; dfs1(1, i); if(R != -1) {e[++ cnt].l = L;e[cnt].r = R;} } memset(dp, 0x3f, sizeof dp); dp[0] = 0; for(int i = 1; i <= m; i ++) for(int j = 1; j <= cnt; j ++) if(i >= e[j].l && i <= e[j].r && dp[i] > dp[e[j].l-1] + 1) dp[i] = dp[e[j].l-1] + 1; printf("1\n%d\n", dp[m]); return 0;}
0 0
- NOIP2010 引水入城
- [NOIP2010]引水入城
- NOIP2010 引水入城
- NOIP2010 引水入城
- NOIP2010【引水入城】
- [NOIP2010] 引水入城
- 【NOIP2010】引水入城
- [NOIP2010]引水入城
- 【P1777】引水入城 NOIP2010
- NOIP2010引水入城题解
- noip2010-4 引水入城
- NOIP2010 T4 引水入城
- 【NOIP2010】引水入城 {搜索}
- NOIP2010 引水入城(BFS+贪心)
- 引水入城——noip2010
- 【NOIP2010】引水入城 DFS+贪心
- 【dp】NOIP2010提高组引水入城
- NOIP2010提高组 引水入城
- [bzoj1026][SCOI2009]windy数
- 使用synchronized和Lock对象获取对象锁
- jQuery中的datatable 插件新增一行
- HDOJ-1671-字典树
- Android官方数据绑定框架DataBinding(二)
- [NOIP2010]引水入城
- tcp ip协议笔记(4)——arp
- 聊一聊关于AIDL 那点事
- Ubuntu下nginx配置php环境
- Swift和OC混编
- udp bind 127.0.0.1出现: Cannot assign requested address" error
- Android下运行时动态链接dlopen()和dlsym()的实现
- 【Ajax技术】利用XHR接受与处理XML数据
- java虚拟机内存管理介绍