-
个人简介
打家劫舍:
#include<bits/stdc++.h> using namespace std; int a[1005]; int dp[1005]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } dp[1]=a[1]; for(int i=2;i<=n;i++){ dp[i]=max(dp[i-2]+a[i],dp[i-1]); } int maxx=0; for(int i=1;i<=n;i++){ maxx=max(maxx,dp[i]); } cout<<maxx; return 0; }不同路径:
#include<bits/stdc++.h> using namespace std; int a[105][105]; int dp[105][105]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } dp[1][1]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(i==1&&j==1) continue; if(a[i][j]==1){ dp[i][j]=0; }else{ dp[i][j]=dp[i-1][j]+dp[i][j-1]; } } } cout<<dp[n][m]; return 0; }中位数:
#include<bits/stdc++.h> using namespace std; int a[10005]; int n,m; int l1,r1; bool check(int x){ l1=0,r1=0; for(int i=1;i<=n;i++){ if(a[i]<x) l1++; else if(a[i]>x) r1++; } if(l1==r1) return true; else return false; } int main(){ cin>>n>>m; int maxx=-9; int minn=INT_MAX; for(int i=1;i<=n;i++){ cin>>a[i]; maxx=max(maxx,a[i]); minn=min(minn,a[i]); } int l=minn,r=maxx; int o; while(l<=r){ int mid=(r-l)/2+l; if(check(mid)==true){ o=mid; break; }else if(check(mid)==false&&l1<r1){ l=mid+1; }else if(check(mid)==false&&l1>r1){ r=mid-1; } } cout<<o; return 0; }水杯:
#include<bits/stdc++.h> using namespace std; struct node { int z1; int z2; int z3; int bu; }; int a, b, c, a1, b1, c1; bool f[55][55][55]; queue<node> s; bool f1 = false; void bfs(int x, int y, int z, int step) { node o = {x, y, z, step}; f[x][y][z] = true; s.push(o); while (!s.empty()) { node p = s.front(); s.pop(); if (p.z1 == a1 && p.z2 == b1 && p.z3 == c1) { cout << p.bu << endl; f1 = true; return ; } node q; if (p.z1 != 0 && p.z2 != b) { int x1, y1; x1 = max(0, p.z1 - (b - p.z2)); y1 = min(b, p.z2 + p.z1); if (f[x1][y1][p.z3] == false) { f[x1][y1][p.z3] = true; q = {x1, y1, p.z3, p.bu + 1}; s.push(q); } } if (p.z1 != 0 && p.z3 != c ) { int x1, y1; x1 = max(0, p.z1 - (c - p.z3)); y1 = min(c, p.z3 + p.z1); if (f[x1][p.z2][y1] == false) { f[x1][p.z2][y1] = true; q = {x1, p.z2, y1, p.bu + 1}; s.push(q); } } if (p.z2 != 0 && p.z1 != a ) { int x1, y1; x1 = max(0, p.z2 - (a - p.z1)); y1 = min(a, p.z1 + p.z2); if (f[y1][x1][p.z3] == false) { f[y1][x1][p.z3] = true; q = { y1, x1, p.z3, p.bu + 1}; s.push(q); } } if (p.z2 != 0 && p.z3 != c ) { int x1, y1; x1 = max(0, p.z2 - (c - p.z3)); y1 = min(c, p.z3 + p.z2); if (f[p.z1][x1][y1] == false) { f[p.z1][x1][y1] = true; q = { p.z1, x1, y1, p.bu + 1}; s.push(q); } } if (p.z3 != 0 && p.z1 != a ) { int x1, y1; x1 = max(0, p.z3 - (a - p.z1)); y1 = min(a, p.z1 + p.z3); if (f[y1][p.z2][x1] == false) { f[y1][p.z2][x1] = true; q = { y1, p.z2, x1, p.bu + 1}; s.push(q); } } if (p.z3 != 0 && p.z2 != b ) { int x1, y1; x1 = max(0, p.z3 - (b - p.z2)); y1 = min(b, p.z2 + p.z3); if (f[p.z1][y1][x1] == false) { f[p.z1][y1][x1] = true; q = { p.z1, y1, x1, p.bu + 1}; s.push(q); } } } } int main() { int t; cin >> t; while (t--) { f1 = false; while (!s.empty()) s.pop(); memset(f, 0, sizeof(f)); cin >> a >> b >> c; cin >> a1 >> b1 >> c1; bfs(a, 0, 0, 0); if (f1 == false) { cout << -1 << endl; } } return 0; }连锁店:
#include<bits/stdc++.h> using namespace std; int a[1005][1005]; bool f[1005][1005]; bool ff[1005][1005]; int zhi[1005][1005]; int n, m, k, d; struct node { int l1, r1; } b[100005]; struct node1 { int zuo1; int zuo2; int bu; }; queue<node1> s; int xx[] = {1, -1, 0, 0}; int yy[] = {0, 0, 1, -1}; void bfs(int x, int y, int step) { node1 o = {x, y, step}; s.push(o); if(ff[x][y]==true){ zhi[x][y] = min(zhi[x][y], step); } while (!s.empty()) { node1 p = s.front(); s.pop(); if(ff[p.zuo1][p.zuo2]==true){ zhi[p.zuo1][p.zuo2] = min(zhi[p.zuo1][p.zuo2], p.bu); } for (int i = 0; i < 4; i++) { int xz = xx[i] + p.zuo1; int yz = yy[i] + p.zuo2; if (xz >= 1 && xz <= n && yz >= 1 && yz <= n && f[xz][yz] == false && a[xz][yz] != -15) { f[xz][yz] = true; node1 q = {xz, yz, p.bu + 1}; s.push(q); } } } } int main() { cin >> n >> m >> k >> d; memset(zhi, 99999, sizeof(zhi)); int idx = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { a[i][j] = 0; } } for (int i = 1; i <= m; i++) { int l, r; cin >> l >> r; b[++idx].l1 = l; b[idx].r1 = r; a[l][r] = 1; } for (int i = 1; i <= k; i++) { int u, v, w; cin >> u >> v >> w; a[u][v] = w; ff[u][v]=true; } for (int i = 1; i <= d; i++) { int l, r; cin >> l >> r; a[l][r] = -15; } for (int i = 1; i <= idx; i++) { if (a[b[i].l1][b[i].r1] == 1) { f[b[i].l1][b[i].r1] = true; zhi[b[i].l1][b[i].r1]=0; bfs(b[i].l1, b[i].r1, 0); } } int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(ff[i][j]==true){ cout<<a[i][j]<<" "<<zhi[i][j]<<endl; ans+=(zhi[i][j]*a[i][j]); } } } cout<<ans; return 0; }飞地:
```language #include<bits/stdc++.h> using namespace std; int a[105][105]; bool f[105][105]; int n, m; int xx[] = {0, 0, 1, -1}; int yy[] = {1, -1, 0, 0}; void dfs(int x, int y) { for (int i = 0; i < 4; i++) { int xz = xx[i] + x; int yz = yy[i] + y; if (xz >= 1 && xz <= n && yz >= 1 && yz <= m && f[xz][yz] == false && a[xz][yz] == 1) { f[xz][yz] = true; a[xz][yz] = 0; dfs(xz, yz); f[xz][yz] = false; } } } int main() { int ans = 0; cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; } } for (int i = 1; i <= n; i++) { if (a[i][1] == 1) { f[i][1] = true; a[i][1] = 0; dfs(i, 1); } } for (int i = 1; i <= n; i++) { if (a[i][n] == 1) { f[i][n] = true; a[i][n] = 0; dfs(i, n); } } for (int i = 1; i <= m; i++) { if (a[1][i] == 1) { f[1][i] = true; a[1][i] = 0; dfs(1, i); } } for (int i = 1; i <= m; i++) { if (a[1][m] == 1) { f[1][m] = true; a[1][m] = 0; dfs(1, m); } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] == 1) { ans++; } } } cout << ans; return 0; }火灾:
#include<bits/stdc++.h> using namespace std; char a[105][105]; int zhi[105][105]; bool f[105][105]; bool ff[105][105]; int l,r,l1,r1; struct node{ int zuo1; int zuo2; int bu; }; queue<node> s,s1; int n,m; int xx[]={0,0,1,-1}; int yy[]={1,-1,0,0}; void bfs(int x,int y,int step){ node o={x,y,step}; s.push(o); while(!s.empty()){ node p=s.front(); s.pop(); for(int i=0;i<4;i++){ int xz=xx[i]+p.zuo1; int yz=yy[i]+p.zuo2; if(xz>=1&&xz<=n&&yz>=1&&yz<=m&&f[xz][yz]==false&&a[xz][yz]!='#'){ f[xz][yz]=true; zhi[xz][yz]=p.bu+1; node q={xz,yz,p.bu+1}; s.push(q); } } } } bool f1=false; void bfs1(int x,int y,int step){ node o={x,y,step}; s.push(o); while(!s.empty()){ node p=s.front(); s.pop(); for(int i=0;i<4;i++){ int xz=xx[i]+p.zuo1; int yz=yy[i]+p.zuo2; if(xz<1||xz>n||yz<1||yz>m){ f1=true; cout<<p.bu+1; return ; } if(xz>=1&&xz<=n&&yz>=1&&yz<=m&&a[xz][yz]!='#'&&ff[xz][yz]==false&&p.bu+1<zhi[xz][yz]){ ff[xz][yz]=true; node q={xz,yz,p.bu+1}; s.push(q); } } } } int main(){ int t; cin>>t; while(t--){ f1=false; memset(zhi,0,sizeof(zhi)); memset(f,false,sizeof(f)); memset(ff,false,sizeof(ff)); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; if(a[i][j]=='J') l=i,r=j; if(a[i][j]=='F') l1=i,r1=j; } } if(l==l1&&r==r1){ cout<<"IMPOSSIBLE"<<endl; continue; } f[l1][r1]=true; zhi[l1][r1]=0; bfs(l1,r1,0); ff[l][r]=true; bfs1(l,r,0); if(f1==false){ cout<<"IMPOSSIBLE"<<endl; } } return 0; } -
通过的题目
-
最近活动
This person is lazy and didn't join any contests or homework. -
最近编写的题解
This person is lazy and didn't write any solutions.
题目标签
- 搜索
- 15
- 广搜
- 7
- 栈
- 6
- 深搜
- 6
- 动态规划
- 2
- 二分
- 2
- 分治
- 1
- 枚举
- 1
- 递归
- 1
- 其他
- 1
- 排序
- 1
- 搜索专题
- 1
- 一本通
- 1
- 一本通2018-第五章-搜索与回溯算法
- 1