这里用来温习之前学过的基础知识
不然longlong的脑袋会boomboom
随缘更新哈哈哈哈哈哈哈哈哈哈哈哈
快速幂
inline long long qpow(int x,int k){
int sum=1;
while(k){
if(k%2==1) sum=1ll*sum*x;
x=1ll*x*x;
k/=2;
}
return sum;
}
dp背包问题
#include<bits/stdc++.h>
using namespace std;
int f[1000][1000];
int n,m,w[1000],v[1000];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++)
cin>>w[i]>>v[i];
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++)
f[i][j]=f[i-1][j];
for(int j=0;j<=m;j++)
if(j-w[i]>=0) f[i][j]=max(f[i][j],f[i-1][j-w[i]]+v[i]);
}
cout<<f[n][m]<<endl;
return 0;
}
///01二维
全排列(递归)
#include<bits/stdc++.h>
using namespace std;
int n,s[10001];
bool b[10010];
void dfs(int x){
if(x>n){
for(int i=1;i<=n;i++) cout<<s[i]<<" ";
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(b[i]) continue;
b[i]=true; s[x]=i;
dfs(x+1);
b[i]=false; s[x]=0;
}
}
int main(){
cin>>n;
dfs(1);
return 0;
}
辗转相除法求最大公约数
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
特别鸣谢代码老前辈duan2baka的谆谆教诲!