AtCode DP专练A-P

链接:Educational DP Contest - AtCoder

A - Frog 1

题意:有n个石头,从1石头出发,每次可以跳一格或者俩格,代价为俩个格子间的高度差

思路:对于第i个石头,可以从石头i-1和i-2得到,比较一下代价即可

f[i]=max(f[i-1]+abs(h[i]-h[i-1),f[i-2]+abs(h[i]-h[i-2])

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=1e6+7;void solve()
{int n;cin>>n;vector<int> a(n);for(int &x:a){cin>>x;}vector<int> f(n,1e9);f[0]=0;for(int i=1;i<n;i++){if(i-1>=0){f[i]=min(f[i-1]+abs(a[i]-a[i-1]),f[i]);}if(i-2>=0){f[i]=min(f[i],min(f[i-1]+abs(a[i]-a[i-1]),f[i-2]+abs(a[i]-a[i-2])));}}cout<<f[n-1]<<endl;}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

B - Frog 2

题意:将上一题的跳跃距离改为k

思路:枚举i-k到i-1到i的代价就可以了

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=1e5+7;void solve()
{int n,k;cin>>n>>k;vector<int> a(n+1);for(int i=1;i<=n;i++) cin>>a[i];vector<int> dp(n+1,1e9);dp[1]=0;//f[0]=0;for(int i=1;i<=n;i++){for(int j=i-1;j>=0&&(i-j)<=k;j--){dp[i]=min(dp[i],dp[j]+abs(a[i]-a[j]));}}cout<<dp[n]<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

C - Vacation

题意:有N天,每天可以选择三件事情其中一件事情去做,获得该事情当天对应的快乐值,不能连续俩天做一样的事情,求最大的快乐

思路:对于第i天的事情,如果做A,那就是从前一天做B或者做C转移过来

dp数组开第二维分别对应ABC三件事情

f[i][A]=max(f[i-1][B]+b[i],f[i-1][C]+c[i])

对于BC同理转移

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=1e5+7;ll f[N][5];
void solve()
{int n;cin>>n;vector<ll> a(n+1);vector<ll> b(n+1);vector<ll> c(n+1);for(int i=1;i<=n;i++){cin>>a[i]>>b[i]>>c[i];}f[0][1]=f[0][2]=f[0][3]=0;for(int i=1;i<=n;i++){f[i][1]=max(f[i-1][2]+a[i],f[i-1][3]+a[i]);f[i][2]=max(f[i-1][1]+b[i],f[i-1][3]+b[i]);f[i][3]=max(f[i-1][1]+c[i],f[i-1][2]+c[i]);}cout<<max(f[n][1],max(f[n][2],f[n][3]))<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

D - Knapsack 1

题意:N件物品,每件有一个重量和价值,给定一个背包最大容量,求最大体积

思路:总体积较小的背包问题可以枚举重量,dp数组含义为对于重量i的最大价值是多少,注意是每件只能拿一件

对于每一种质量i: dp[i]=max(dp[i],dp[i-w[i]]+v[i])可以有

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=1e5+7;void solve()
{int n,w;cin>>n>>w;vector<pair<int,ll>> q(n);for(int i=0;i<n;i++){cin>>q[i].first>>q[i].second;}vector<ll> f(w+1,0);for(int i=0;i<n;i++){for(int j=w;j>=q[i].first;j--){f[j]=max(f[j],f[j-q[i].first]+q[i].second);}}//cout<<f[3]<<endl;cout<<f[w]<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

E - Knapsack 1

题意:同上,但是w的范围变大了

思路:改为枚举价值,最后从大到小看价值对于的质量是否超过W

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=1e5+7;void solve()
{int n,w;cin>>n>>w;vector<pair<ll,int>> q(n);for(int i=0;i<n;i++){cin>>q[i].first>>q[i].second;	}vector<ll> f(N+1,1e12);f[0]=0;for(int j=0;j<n;j++){for(int i=N;i>=q[j].second;i--){f[i]=min(f[i],f[i-q[j].second]+q[j].first);}}for(int i=N;i>=0;i--){if(f[i]<=w){cout<<i<<endl;return;}}
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

F - LCS

题意:对于俩个字符串,找到最大公共字符串

思路:dp数组俩维表示a字符串到i的位置,b字符串到j的位置的时候的最大匹配

所以有if (a[i]==b[i]) dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1)

else dp[i][j]=max(dp[i-1][j],dp[i][j-1])

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=3e3+7;int f[N][N];void solve()
{string a,b;cin>>a>>b;f[0][0]=0;for(int i=0;i<a.size();i++){for(int j=0;j<b.size();j++){if(a[i]==b[j]){f[i+1][j+1]=max(f[i+1][j+1],f[i][j]+1);}else{f[i+1][j+1]=max(f[i+1][j],f[i][j+1]);}}}//cout<<f[a.size()][b.size()]<<endl;int i=a.size(),j=b.size();vector<char> ans;while(i!=0&&j!=0){if(a[i-1]==b[j-1]){ans.push_back(a[--i]);j--;}else if(f[i-1][j]<f[i][j-1]){j--;}else{i--;}}reverse(ans.begin(),ans.end());for(auto it:ans){cout<<it;}cout<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

G - Longest Path

题意:图上最长路径

思路:从一个点出发的时候,找他的最长儿子,然后从多个点出发都试试

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=1e5+7;vector<int> q[N];
int dp[N];
int ans=0;
int dfs(int now){//cout<<1<<endl;if(dp[now]){return dp[now];}for(auto it:q[now]){dp[now]=max(dp[now],dfs(it)+1);}return dp[now];
}void solve()
{int n,m;cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;//if(x>y) swap(x,y);q[x].push_back(y);//q[y].push_back(x);}//cout<<1<<endl;for(int i=1;i<=n;i++){ans=max(ans,dfs(i));}cout<<ans;}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

H - Grid 1

题意:询问从(1,1)到(n,m)的路径数量

思路:dp数组俩维表示到(i,j)的时候的路径数量

dp[i][j]+=dp[i-1][j]+dp[i][j-1]

同时如果(i-1,j)是非法的就不用加,(i,j-1)同理,如果(i,j)不能走就不用修改了,记得取模QAQ

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=1e5+7;char mp[1005][1050];
void solve()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>mp[i][j];}}vector<vector<ll>> f(n+1,vector<ll>(m+1,0));f[1][1]=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i==1&&j==1) continue;if(mp[i][j]=='#') continue;if(i-1>=1&&mp[i-1][j]!='#'){f[i][j]+=f[i-1][j]%mod;}if(j-1>=1&&mp[i][j-1]!='#'){f[i][j]+=f[i][j-1]%mod;}f[i][j]%=mod;}}cout<<f[n][m]<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

I - Coins

题意:有N个硬币,丢出后每一有一个概率p,共n个p的概率朝上,求超过一半的硬币向上的概率

思路:dp数组俩维为对于前i个硬币有j个向上

dp[i][j]=dp[i-1][j-1]*p[i]+dp[i-1][j]*(1-p[i])

就是当前状态可以由i-1个硬币来,这个硬币是朝上或者朝下,

注意j-1不能越界

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=3e3+7;double f[N][N];
void solve()
{int n;cin>>n;vector<double> p(n+1);for(int i=1;i<=n;i++){cin>>p[i];}f[1][1]=p[1];f[1][0]=(1.0-p[1]);for(int i=2;i<=n;i++){for(int j=0;j<=i;j++){if(j==0){f[i][j]=f[i-1][j]*(1.0-p[i]);}else{f[i][j]=f[i-1][j-1]*p[i]+f[i-1][j]*(1.0-p[i]);}}}double ans=0;for(int i=(n+1)/2;i<=n;i++){ans+=f[n][i];}cout<<setprecision(12)<<ans<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

J - Sushi 

题意:给定N个盘子,每个盘子上面有ai个寿司,每次在1到n等概率抽取一个盘子去掉一个寿司,(如果没有就不用去),求去掉全部寿司的期望

思路:ai的范围只有1~3,我们使用三维dp数组来记录每一种数量的寿司的变化,i,j,k表示使用1,2,3个寿司的盘子个数

例如使用了三个寿司的盘子,那么三个寿司的盘子数量会减少1,但是俩个盘子的数量会增加1;影响他人的要放在循环的外围,还有可以没变化的操作。

if k>0 :f[i][j][k]+=f[i][j+1][k-1]*(k/(i+j+k))

其他同理

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=300+7;
#define all (i+j+k)double f[N][N][N];
void solve()
{vector<int> book(5,0);int n;cin>>n;for(int i=1;i<=n;i++){int x;cin>>x;book[x]++;}for(int k=0;k<=n;k++){for(int j=0;j<=n;j++){for(int i=0;i<=n;i++){if(i||j||k){if(i){f[i][j][k]+=f[i-1][j][k]*((double)i/all);}if(j){f[i][j][k]+=f[i+1][j-1][k]*((double)j/all);}if(k){f[i][j][k]+=f[i][j+1][k-1]*((double)k/all);}f[i][j][k]+=(double)n/all;}}}}cout<<setprecision(12)<<f[book[1]][book[2]][book[3]]<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

K - Stones

题意:一个集合有n个数字,轮流拿石头数量为集合中的数字的石头,直到有K个石头,求谁赢,没法拿的人就算输了

思路:背包问题的变形,dp数组表示数量总和为i的时候的数字,然后枚举所有质量,所有质量下去看是谁先手后手

dp[i] | =dp[i-w[j]]

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=3e3+7;void solve()
{int n,k;cin>>n>>k;vector<int> v(n+1);for(int i=1;i<=n;i++){cin>>v[i];}vector<int> dp(k+1,0);for(int i=1;i<=k;i++){for(int j=1;j<=n;j++){if(i>=v[j]){dp[i]|=(!dp[i-v[j]]);}}}if(dp[k]){cout<<"First"<<endl;}else cout<<"Second"<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

L - Deque

题意:给出一个n个数字的序列,俩人轮流从前或者后拿一个数字,结果为俩个人分别取到的数字的总和之差,先手的要让差尽可能大,后手的要让他尽可能小,求俩人都用最优策略的结果

思路:区间DP,可以枚举n个长度的时候取左边还是取右边,dp数组表示为在区间[l,r]的时候的结果,那么[l,r]区间的结果就是由[l+1,r] [l,r-1]得到的

First: dp[l][r]=max(dp[l+1][r]+a[l],dp[l][r-1]+a[r]) Second: dp[l][r]=min(dp[l+1][r]-a[l],dp[l][r-1]-a[r])

对于后手的考虑成减法就可以了

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e4;
const int N=3e3+7;ll dp[N][N];void solve()
{int n,k;cin>>n;vector<ll> a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}memset(dp,0,sizeof(dp));for(int len=1;len<=n;len++){for(int l=1,r=len;r<=n;l++,r++){if((n-len)%2==0){dp[l][r]=max(dp[l+1][r]+a[l],dp[l][r-1]+a[r]);}else{dp[l][r]=min(dp[l+1][r]-a[l],dp[l][r-1]-a[r]);}}}cout<<dp[1][n]<<endl; 
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

M - Candies

题意:有N个人,要分给他们K个糖果,第i个人可以收到0~ai个糖果,求有多少种分配方案

思路:dp数组表示到第i个人的时候已经分掉了j个糖果,那么dp[i][j]的状态就可以从dp[i-1][j-x]

x为0~a[j]

但是光是这样还会超时,所以对dp[i-1][j-x]要做一个前缀和处理了

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=1e5+7;ll dp[105][N];
ll pre[105][N];
void solve()
{int n,k;cin>>n>>k;vector<int> a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}dp[1][0]=pre[1][0]=1;for(int i=1;i<=k;i++){dp[1][i]=(i<=a[1]);pre[1][i]=dp[1][i]+pre[1][i-1];}for(int i=2;i<=n;i++){dp[i][0]=pre[i][0]=1;for(int j=1;j<=k;j++){if(j<=a[i]){dp[i][j]=pre[i-1][j]%mod;}else{dp[i][j]=(pre[i-1][j]-pre[i-1][j-a[i]-1]+mod)%mod;}pre[i][j]=(pre[i][j-1]+dp[i][j])%mod;}}cout<<dp[n][k]<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

N - Slimes

题意:石子合并,有N块石头,每块有一个质量,将相邻石头堆合并后代价是俩者的和,求最小的代价

思路:区间DP,从小到大枚举合并的长度,然后枚举合并时候的中间点,dp数组含义为i开始的长度为len的石头堆合并的代价

dp[i][len]=dp[i][k]+dp[k][i+len-1]+\sum w[i]

代价和可以利用前缀和计算

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=1e5+7;ll dp[405][405];void solve()
{int n;cin>>n;vector<ll> a(n+1);vector<ll> pre(n+1);memset(dp,0x3f3f3f,sizeof(dp));for(int i=1;i<=n;i++){cin>>a[i];pre[i]=pre[i-1]+a[i];dp[i][1]=0;}for(int len=2;len<=n;len++){for(int j=1;j<=n-len+1;j++){for(int k=1;k<len;k++){dp[j][len]=min(dp[j][len],dp[j][k]+dp[j+k][len-k]+pre[j+len-1]-pre[j-1]);//cout<<dp[j][len]<<endl;}}}cout<<dp[1][n]<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

O - Matching

题意:有N个男生和N个女生,给出一个二维数组代表第i个男生和第j个女生是否匹配,求让所有人都匹配的方案数量

思路:观察到N的数量很小,像是状压DP,枚举女生所有状态,用01串表示,第i个位置是1表示有第i个女生的状态,然后和cnt个男生匹配,cnt表示该状态中拥有的女生的数量,然后枚举每一个i

看mp[cnt][i]是否匹配和这个女生是否存在在这个状态中,可以的话进行转移

这个状态可以从没有这个女生且少一个男生的状态转移来,利用了滚动数组,所以只要dp数组只要记录状态S就行了

S-(1<<i-1)就是从01串中将第i个女生(为1)去掉

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=300+7;int mp[25][25];
int f[1<<22];
void solve()
{int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>mp[i][j];}}f[0]=1;for(int S=1;S<1<<n;S++){int cnt=__builtin_popcount(S);for(int i=1;i<=n;i++){if(mp[cnt][i]&&S>>i-1&1){f[S]=(f[S]+f[S-(1<<i-1)])%mod;}}}cout<<f[(1<<n)-1]<<endl;}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

P - Independent Set

题意:给出一棵树,要给树上的点染色,可以染成白色或者黑色,黑色不能连续染,求有多少种方案

思路:经典树DP,dp数组为i的节点是染什么色的,0白1红,白色节点的子节点就可以是黑色或者白色,黑色节点下面就是白色,先遍历子节点,然后统计答案

dp[now][0]=dp[now][0]*(dp[son[i]][0]+dp[son[i][1]]) ; dp[now][1]=dp[now][1]*dp[son[i]][0]

代码:

#include <bits/stdc++.h>
//#define endl '\n'
#define ll long long
using namespace std;
const ll mod=1e9+7;
const int N=1e5+7;vector<int> q[N];
ll dp[N][2];void dfs(int now,int fa){dp[now][1]=dp[now][0]=1;for(auto it:q[now]){if(it==fa) continue;dfs(it,now);dp[now][0]=(dp[now][0]*(dp[it][0]+dp[it][1])%mod)%mod;dp[now][1]=(dp[now][1]*dp[it][0])%mod;}
}void solve()
{int n;cin>>n;for(int i=1;i<n;i++){int x,y;cin>>x>>y;q[x].push_back(y);q[y].push_back(x);}dfs(1,0);ll ans=(dp[1][0]+dp[1][1])%mod;cout<<ans<<endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t=1;//cin>>t;while(t--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

31.Python从入门到精通—Python数据压缩 性能度量 测试模块

31.从入门到精通&#xff1a;Python数据压缩 性能度量 测试模块 个人简介数据压缩性能度量测试模块 个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:Python领域新星创作者&#xff0c;CSDN实力新星认证&#xff0c…

分类预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记忆网络多输入分类预测

分类预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记忆网络多输入分类预测 目录 分类预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记忆网络多输入分类预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-LSTM贝叶斯优化卷积长短期记…

深度好文:解决Ubuntu 18.04安装nvidia显卡驱动,导致内核不匹配:无需重装系统修复内核

深度好文&#xff1a;解决Ubuntu 18.04安装nvidia显卡驱动&#xff0c;导致内核不匹配&#xff1a;无需重装系统修复内核 目录 一、问题描述二、尝试修复三、安装Nvidia驱动和CUDA并配置cuDNN四、总结 一、问题描述 昨天打算更新一下Ubuntu 18.04的显卡驱动&#xff0c;以支持…

Eclipse新建java类的操作流程

一、在左侧空白区域&#xff0c;点击鼠标右键。 二、点击new&#xff0c;选择Java Project &#xff08;由于这里不知道怎么截图&#xff0c;就用手机拍了一张&#xff0c;希望不要介意&#xff09; 三、 给project文件起个名字&#xff0c;其他都不用管&#xff0c;点击Finis…

云防护是怎么能帮助用户做好网络安全

在数字化时代&#xff0c;网络安全威胁呈现出愈发复杂和多样化的趋势。 无论是个人用户、小型企业还是大型企业&#xff0c;都面临着来自全球各地的网络攻击风险。这些攻击可能导致数据泄露、服务中断、财务损失甚至声誉受损。因此&#xff0c;采取有效的安全防护措施变得至关…

HarmonyOS 应用开发之Stage模型启动FA模型PageAbility

本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。 UIAbility启动PageAbility UIAbility启动PageAbility和UIAbility启动UIAbility的方式完全相同。 说明&#xff1a; 需注意FA模型中abilityName由bundleName AbilityName组成&#xff0c;具体见示例。 i…

不允许你不知道的 MySQL 优化实战(一)

文章目录 1、查询SQL尽量不要使用select *&#xff0c;而是select具体字段。2、如果知道查询结果只有一条或者只要最大/最小一条记录&#xff0c;建议用limit 13、应尽量避免在where子句中使用or来连接条件4、优化limit分页5、优化你的like语句6、使用where条件限定要查询的数据…

uniapp开发App(二)开通 微信授权登录功能(应用签名、证书、包名 全明白)

前言&#xff1a;开发App肯定要包含登陆&#xff0c;常用登陆方式很多&#xff0c;我选择微信登陆。 一、如何获得微信的授权登陆 答&#xff1a;申请&#xff0c;根据uniapp官网的提示有如下三个步骤 开通 1. 登录微信开放平台区&#xff0c;添加移动应用并提交审核&#xf…

C语言中的文件和文件操作

目录 为什么会有文件&#xff1f; 文件名 ⼆进制⽂件和⽂本⽂件&#xff1f; ⽂件的打开和关闭 流 标准流 ⽂件指针 ⽂件的打开和关闭 顺序读写函数介绍 对⽐⼀组函数&#xff1a; 文件的随机读写 fseek ftell rewind ⽂件读取结束的判定 被错误使⽤的 feof ⽂件…

PCL点云处理之重复随机采样一致性(RRANSAC法)平面拟合(二百三十七)

PCL点云处理之重复随机采样一致性(RRANSAC法)平面拟合(二百三十七) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 pcl::SAC_RRANSAC"是 PCL库中的一个方法,是 RANSAC 方法的改进版本,通过多次重复采样和模型拟合来提高鲁棒性。RRANSAC 的思想是在 RANSAC 的基…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

Windows提权!!!

之前讲过一下提权&#xff0c;但是感觉有点不成体系&#xff0c;所以我们就成体系的来讲一下这个操作系统的提权 目录 Windows的提权 1.Widnows的内核溢出提权 1.MSF自带的提权模块&#xff08;Win11都能提上来&#xff0c;有点牛逼&#xff09; 2.CS的插件提权 3.补丁对比…

透视未来安全:PIR技术引领数据隐私新时代

1.隐语实现PIR总体介绍 隐语实现的Private Information Retrieval (PIR) 是一种隐私增强技术&#xff0c;它使用户能够在不暴露他们实际查询内容的情况下从远程服务器数据库中检索所需信息。以下是隐语在实现PIR方面的概要说明和技术特点&#xff1a; 基本概念&#xff1a; PI…

【蓝桥杯】矩阵快速幂

一.快速幂概述 1.引例 1&#xff09;题目描述&#xff1a; 求A^B的最后三位数表示的整数&#xff0c;A^B表示&#xff1a;A的B次方。 2&#xff09;思路&#xff1a; 一般的思路是&#xff1a;求出A的B次幂&#xff0c;再取结果的最后三位数。但是由于计算机能够表示的数字…

[linux初阶][vim-gcc-gdb] TwoCharter: gcc编译器

目录 一.Linux中gcc编译器的下载与安装 二.使用gcc编译器来翻译 C语言程序 ①.编写C语言代码 ②翻译C语言代码 a.预处理 b.编译 c.汇编 d.链接 ③.执行Main 二进制可执行程序(.exe文件) 三.总结 一.Linux中gcc编译器的下载与安装 使用yum命令(相当于手机上的应用…

10_MVC

文章目录 JSON常用的JSON解析Jackson的常规使用指定日期格式 MVC设计模式MVC介绍前后端分离案例&#xff08;开发与Json相关接口&#xff09; 三层架构三层架构介绍 JSON JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;是存…

JUC并发编程(七)

1、不可变对象 1.1、概念 不可变类是指一旦创建对象实例后&#xff0c;就不能修改该实例的状态。这意味着不可变类的对象是不可修改的&#xff0c;其内部状态在对象创建后不能被更改。不可变类通常具有以下特征&#xff1a; 实例状态不可改变&#xff1a;一旦不可变类的对象被…

unordered系列容器OJ

目录 1、unordered系列容器 2、unordered系列容器OJ 1、重复n次的元素 2、两个数组的交集I 3、两个数组的交集II 4、存在重复元素 5、两句话中不常见的单词 1、unordered系列容器 在C标准库中&#xff0c;unordered系列容器是基于哈希表实现的&#xff0c; 用于存储唯一…

用html实现一个文章图片缩略展示

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>文章图片缩略展示</title><link rel"stylesheet" href"./style.css"> </head> <body> <div class&qu…

初始《string》及手搓模拟实现《string》

目录 前言&#xff1a; 为什么学习string类&#xff1f; 标准库中的string类 1. string类对象的常见构造 ​编辑 2. string类对象的容量操作 ​编辑 3. string类对象的访问及遍历操作 4. string类对象的修改操作 5. string类非成员函数 vs和g下string结构的说明 vs下s…