美团点评2017秋招笔试编程题

美团点评2017秋招笔试编程题
1.

#include<bits/stdc++.h>

using namespace std;

int f[8] = {0,1,1,1,1,1,1};
int main()
{
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++)
        for(int j = 1;j < i;j++){
            //cout<<f[i]<<" "<<f[j]<<"\n";
            f[i] += f[j];
        }

    cout<<f[n]<<"\n";
    return 0;
}

2.

#include<bits/stdc++.h>

using namespace std;

int v[7] = {0,1,5,10,20,50,100};
long long f[10005];
int main()
{
    int n;
    cin >> n;
    f[0] = 1;

    for(int i = 1;i <= 6;i++)
        for(int j = v[i];j <= n;j++)
            f[j] += f[j-v[i]];

    cout<<f[n]<<"\n";
    return 0;
}

3.
leetcode 84. Largest Rectangle in Histogram
栈:

#include<bits/stdc++.h>

using namespace std;
int h[10005];

int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)
        scanf("%d",&h[i]);
    h[n+1] = 0;
    stack<int> s;
    s.push(1);
    long long maxn = 0;
    for(int i = 2;i <= n+1;i++)
    {
        while(!s.empty() && h[i] < h[s.top()])
        {
            int pos = s.top();
            s.pop();
            if(s.empty())
                maxn = max(maxn,h[pos]*i*1ll);
            else
                maxn = max(maxn,h[pos]*(i-s.top()-1ll));
        }
        s.push(i);
    }
    printf("%lld\n",maxn);
    return 0;
}

dp:
4.

#include<bits/stdc++.h>

using namespace std;/*
int nxt[55] = {-1};
char p[55],s[55];
void get(int m)
{
    int i = 0,j = -1;
    while(i < m)
    {
        if(j == - 1 || p[i] == p[j])
            nxt[++i] = ++j;
        else
            j = nxt[j];
    }
}
bool kmp(int m,int n)
{
    int i = 0,j = 0;
    while(i < n)
    {
        if(j == -1 || s[i] == p[j])
            i++,j++;
        else
            j = nxt[j];
        if(j == m)
            return true;
    }
    return false;
}*/
int main()
{
    string p,s;
    getline(cin,p);
    getline(cin,s);
    int lenp = p.length();
    int lens = s.length();
    int maxn = 0;
    if(lenp > lens)
        swap(p,s),swap(lenp,lens);

        for(int i = 0;i < lenp;i++)
            for(int j = i;j < lenp;j++)
                if(s.find(p.substr(i,j-i+1)) != -1)
                    maxn = max(maxn,j-i+1);

    cout<<maxn<<"\n";
    return 0;
}

猜你喜欢

转载自blog.csdn.net/huatian5/article/details/79996978