//二进制压位
int ans=0;
for(int i = 0;i < (1<<14);i++){
int tot_1=0;
int tot_0=0;
int num = 2;
for(int j = 0;j < 14;j++){
if(i&(1<<j)){
tot_1++;
num = num*2;
}else{
tot_0++;
num=num-1;
}
}
if(tot_1==5&&tot_0==9&&num==1){
ans++;
}
}
//01背包问题
for(int i = 1;i <= N;i++){
for(int j = 0;j <= v;j++){
if(j>=w[i]){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
}else{
dp[i][j]=dp[i-1][j];
}
}
}
//完全背包问题
for(int i = 1;i <= N;i++){
for(int j = c[i];j <= v;j++){
dp[i][j]=max(dp[i-1][j],dp[i][j-c[i]]+w[i]);
}
}
dp[N][v];
//最长上升子序列
int dp[MAX_N],a[MAX_N],n,ans=0;
for(int i = 1;i <= n;i++){
dp[i]=1;
for(int j = 1;j < i;j++){
if(a[j]<a[i]){
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);
}
//最长公共子序列
char s1[MAX_N],s2[MAX_N];
int n,ans=0,lcs[MAX_N][MAX_N];
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
lcs[i][j]=0;
if(s1[i]==s2[j]){
lcs[i][j]=lcs[i-1][j-1]+1;
}else{
lcs[i][j]=max(lcs[i-1][j],lcs[i][j-1]);
}
ans=max(ans,lcs[i][j]);
}
}
//欧几里得算法(最大公约数):辗转相除法
int gcd(int a,int b){
if(b==0){
return a;
}
return gcd(b,a%b);
}
//欧几里得算法:辗转相除法
int gcd(int a,int b){
if(b==0){
return a;
}
return gcd(b,a%b);
}
//欧几里得算法:辗转相除法
int gcd(int a,int b){
if(b == 0){
return a;
}
return gcd(b,a%b);
}
//最小公倍数
lcm(a,b)=(a*b)/gcd(a,b);
//质数筛选:埃氏筛选法
int n;
for(int i = 2;i <= n;i++){
is_prime[i]=1;//初始化为质数
}
for(int i = 2;i*i<=n;i++){
if(is_prime[i]){
for(int j = i*i;j<=n;j+=i){
is_prime[j]=0;
}
}
}
//质数筛选法:埃氏筛选法
int n;
for(int i=2;i<=n;i++){
is_prime[i]=0;//初始化为质数
}
for(int i=2;i*i<=n;i++){
if(is_prime[i]){
for(int j=i*i;j<=n,j+=i){
is_prime[j]=0;
}
}
}
#include <algorithm>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
//判断闰年
int is_leap_year(int year){
if(year%400==0 ||(year%100!=0&&year%4==0)){
return 1;
}
return 0;
}
//判断闰年
int is_leap_year(int year){
if(year%400==0||(year%100!=0&&year%4==0)){
return 1;
}
return 0;
}
//判断闰年
int is_leap_year(int year){
if(year%400==0||(year%100!=0&&year%4==0)){
return 1;
}
return 0;
}
//二分法优化
int l=1,r=max_num;
while(l<r){
int mid=(l+r+1)/2;
if(cut_ok(mid)){
l=mid;
}else{
r=mid-1;
}
}
//暴力搜索:dfs。凑算式
#include<stdio.h>
int num[10];
int ans=0;
bool visit[10];
void solve(){
double sum = num[0]+(double)num[1]/num[2]+(double)(num[3]*100+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]);
if(sum==10){
ans++;
}
void dfs(int index){
if(index==9){
solve();
return;
}
for(int i=1;i<10;i++){
if(!visit[i]){
visit[i]=true;
num[index]=i;
dfs(index+1);
visit[i]=false;
}
}
}
int main(){
dfs(0);
printf("%d\n",ans);
return 0;
}
}
//快速排序
void swap(int a[],int i,int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
int partition(int a[],int p,int r){
int i = p;
int j = r+1;
int x = a[p];
while(1){
while(i<r&&a[++i]<x);
while(a[--j]>x);
if(i>=j)break;
swap(a,i,j);
}
swap(a,p,j);
return j;
}
void quicksort(int a[],int p,int r){
if(p<r){
int q = partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main(){
int a[]={5,12,65,44,2,8,62,4,3,98,14,25};
int N=12;
quicksort(a,0,N-1);
for(int i = 0;i < N;i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
蓝桥杯常考的算法模版
最新推荐文章于 2024-03-25 22:07:09 发布