#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define int long long
string s;signed main(){cin>>s;s=s+'0';int n;cin>>n;while(n--){for(int i=0;i<s.size()-1;i++){if(s[i]>s[i+1]){s.erase(s.begin()+i);break;}}}s[s.size()-1]='\0';cout<<stoi(s)<<endl;return 0;
}
17.小松鼠聚会
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int N=1e6+10;
vector<int> g[N];
bool vis[N];
int a[N];
int n,m,k,ans;
struct node{int x,depth;
};
void bfs(node s){queue<node> q;q.push(s);vis[s.x]=1;while(!q.empty()){node cur=q.front();q.pop();if(cur.depth-1<=k){ans+=a[cur.x];}else{break;}for(int i=0;i<g[cur.x].size();i++){int id=g[cur.x][i];if(!vis[id]){q.push({id,cur.depth+1});vis[id]=1;}}}
}
int main(){cin>>n;m=n-1;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=m;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}cin>>k;for(int st=1;st<=n;st++){memset(vis,0,sizeof vis);ans=0;bfs({st,1});cout<<ans<<endl;}return 0;
}
18.dijkstra求单源最短路
邻接矩阵版本
#include<iostream>
#include<climits>
#include<algorithm>
using namespace std;
const int N = 1e4 + 10, INF = INT_MAX;
int g[N][N];//邻接矩阵
int mindis[N];//最短路数组,mindis[i]代表起点到i点的最短路
bool vis[N];
int n, m, s;
//邻接矩阵版dijkstra,同时可以处理重边和边权为0的情况
void dijkstra(int s) {//dijkstra第一步:集合中起点值置0mindis[s] = 0;for (int i = 1; i <= n; i++) {//dijkstra性质:每次循环从集合中找到未被标记过的最小值(和下标),该最小值就是起点到该点的最小值int mi = INT_MAX, minId = 0;for (int j = 1; j <= n; j++) {if (!vis[j] && mindis[j] < mi) {mi = mindis[j];minId = j;}}//找到起点到该点的最小值立马标记vis[minId] = 1;//dijkstra以minId作为中转点,向外进行扫描,更新起点到其他个点的最短距离即mindis数组for (int j = 1; j <= n; j++) {if (!vis[j] && g[minId][j]!=INT_MAX) {//mi是起点到minId的最短距离+minId到j距离 < 当前起点到j的最短距离if (mi + g[minId][j] < mindis[j]) {mindis[j] = mi + g[minId][j];}}}}
}
int main() {cin >> n >> m >> s;for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) g[i][j] = INT_MAX;for (int i = 1; i <= m; i++) {int u, v, w; cin >> u >> v>> w;//有向图注意单向连边g[u][v] = min(g[u][v], w);//本题有重边,在所有的重边里面找到最小值}fill(mindis, mindis + N, INF);dijkstra(s);for (int i = 1; i <= n; i++) cout << mindis[i] << " ";return 0;
}
邻接表版本
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
#define int long long
const int N=1e4+10,MX=INT_MAX;
vector<pair<int,int>> g[N];
int n,m,st,mindis[N],vis[N];
void dijkstra(int s){mindis[s]=0;//每次循环标记mindis集合中的一个,标记了相当于找对了起点到该点的最短路,n个都标记了说明dij算法已经完成 for(int i=1;i<=n;i++){//dijkstra性质:每次循环找点未被标记过的最小值(和下标),该最小值就是起点到该点的最短路径int mi=INT_MAX,minId=0;for(int j=1;j<=n;j++){if(!vis[j]&&mi>mindis[j]){mi=mindis[j];minId=j;}}//找到最小值意味着最短路找到了,要立马标记vis[minId]=1;//以mi最为中转站,访问它未被标记过的邻接点,更新mindis集合for(int j=0;j<g[minId].size();j++){int id=g[minId][j].first,w=g[minId][j].second;if(!vis[id]&&mi+w<mindis[id]) mindis[id]=mi+w;}}
}
signed main(){cin>>n>>m>>st;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;g[u].push_back({v,w});}fill(mindis,mindis+N,MX);dijkstra(st);for(int i=1;i<=n;i++) cout<<mindis[i]<<" ";return 0;
}
19.Floyd算法
多元最短路
O(n^3)
三层循环枚举中转站,起点,终点,更新mindis i j
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
const int N=1e3+10,INF=INT_MAX;
int mindis[N][N],n,m,st,t;void Floyd(){//枚举中转站for(int k=1;k<=n;k++){//枚举起点for(int i=1;i<=n;i++){//枚举终点for(int j=1;j<=n;j++){//判断i k k j 之间是否有连边if(g[i][k]!=INF&&g[k][j]!=INF&&mindis[i][k]+mindis[k][j]<mindis[i][j]){mindis[i][j]=mindis[i][k]+mindis[k][j];} } } }
}
int main(){cin>>n>>m>>st>>t;fill(mindis[0],mindis[0]+N*N,INF);for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;g[u][v]=g[v][u]=w;}Floyd();cout<<mindis[st][t]<<endl;return 0;
}
Hi3403V100是海思面向高端市场应用推出的专业 Ultra-HD Smart IP Camera SOC,该芯片最高支持四路sensor输入,支持最高4K60的ISP图像处理能力。
海思Hi3403V100方案双目视频模组采用了海思Hi3403V100方案核心板双目视频融合IMX334 Sensor板测试ÿ…