蓝桥杯算法训练题集

蓝桥杯算法训练题目列表

ALGO-1 区间k大数查询

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;

int a[1005];
int tmp[1005];
int ans[1005];
bool cmp(int a,int b)
{
    return a>b;
}
int maxsort(int l,int r,int val)
{
    memset(tmp,0,sizeof(tmp));
    int i=l;int j=1;
   for(;i<=r;i++,j++)
        tmp[j]=a[i];
   sort(tmp+1,tmp+r-l+1+1,cmp);
   return tmp[val];
}

int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int m;
    cin>>m;
    for(int k=1;k<=m;k++)
    {
        int l,r,val;
        cin>>l>>r>>val;
        //cout<<a[]
        cout<<maxsort(l,r,val)<<endl;
    }
//    for(int i=1;i<=m;i++)
//        cout<<ans[i]<<endl;
    return 0;
}

ALGO-3 K好数

DP策略就是从局部到整体,dp[i][j]代表的是位长为i,并且首位是j时状态的总方案数,那么如何用dp[i-1]推到dp[i]呢?
策略如下:由题意得两个相邻位数其值不想邻,我们只需要剔除这种情况即可;
打个比方:设k=3,l=3 如何表示长度为3的方案数呢?
我们得到下面等式:总方案数由下面相加:dp[3][0],dp[3][1],dp[3][2]
并且:
dp[3][0]=dp[2][2]
dp[3][1]=0
dp[3][2]=dp[2][0]
我们决定长度为3时的首位数,然后剔除相邻的情况,拓展到长度为2的情况;

#include <iostream>
#include<cstdio>

using namespace std;
#define MOD 1000000007
int dp[105][105];

int main()
{
    int k,l;
    cin>>k>>l;
    for(int i=0;i<k;i++)
        dp[1][i]=1;
    for(int i=2;i<=l;i++)
        for(int j=0;j<k;j++)
            for(int m=0;m<k;m++){
                if(j!=m+1&&j!=m-1)
                {
                    dp[i][j]+=dp[i-1][m];
                    dp[i][j]%=MOD;
                }
            }

    int sum=0;
    for(int i=1;i<k;i++)
    {
        sum+=dp[l][i];
        sum%=MOD;
    }
    cout<<sum<<endl;
    return 0;
}

ALGO-4 结点选择

ALGO-5 最短路

ALGO-6 安慰奶牛

ALGO-7 逆序对

ALGO-8 操作格子

posted @ 2018-03-09 12:19  Bryce1010  阅读(350)  评论(0编辑  收藏  举报