通用模板

priority_queue
默认大顶堆
小顶堆
priority_queue<int,vector,greater > small_heap;
优先队列的修改

include<bits/stdc++.h>

using namespace std;
const int N=1010,M=10010;
struct node{
int id,num;
bool operator<(const node& a)const{
if (id != a.id)
return a.id < id;
else
return a.num > num;
}
};
priority_queues;
vector<pair<int,int>>res;
int main(){
s.push({2,2});
s.push({2,1});
s.push({2,3});
while(!s.empty()){
cout<<s.top().id<<' '<<s.top().num<<'\n';
s.pop();
}
return 0;
}

include

include

using namespace std;

void max_k_num()
{
int source_data[10] = {3, 5, 8, 1, 10, 2, 9, 15, 13, 16};
int k = 5;
// 小根堆
priority_queue<int, vector, greater> q;
for (auto n : source_data)
{
if (q.size() == k)
{
if (n > q.top())
{
q.pop();
q.push(n);
}
}
else
q.push(n);
}

while (!q.empty()) 
{
    cout << q.top() << endl;
    q.pop();
}

}

这道题偷了个模板,我之前求组合数都是用的动态规划优化的,没想到题解用的优化的更猛。啥也别说了偷了
ll ans[67][67]={0};
ll C(ll n,ll m){
if(m0 || mn) return 1;
if(ans[n][m] != 0)return ans[n][m];
return ans[n][m] = C(n-1,m)+ C(n-1,m-1);//赋值给res[n][m]并返回
}

最短路floyd

include<bits/stdc++.h>

define INF 0x7fffffff/2 //int最大值

using namespace std;
int h,w;
int x,dis[15][15];
void floyd(){
for(int k=0;k<=9;k++){ //枚举每一个点
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
if(dis[i][k]!=INF and dis[k][j]!=INF) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); //松弛操作
}
}
}
}
int main(){
scanf("%d%d",&h,&w);
dis[i][j]//i到j的距离
floyd();
int ans=0;
cout<<dis[x][y];//x到y的最短路径长度
return 0;
}

快速幂
int quik_power(int base, int power, int p)
{
int result = 1;
while (power > 0)
{
if (power & 1)
result = result * base % p;
//根据公式每个项都取余数后在再做累乘
base = base * base % p ;
//根据公式每个项都取余数后在再做平方操作
power >>= 1;
}
//根据公式在最后的的结果上再来一次取余数
return result % p;
}

posted @ 2024-04-19 22:00  niubuniu  阅读(2)  评论(0编辑  收藏  举报