2023.3.14 30天蓝桥训练打卡题目 day 11

szx233 2023-03-14 11:04:33

一、卡片

#include<iostream>
using namespace std;
typedef long long ll;
int b[11];

int main()
{
    for(int i = 0; i <= 9; i ++ ) b[i] = 2021;
    for(int i = 1; ; i ++ )
    {
        int r = i;
        while(r)
        {
            int u = r % 10;
            if(!b[u])
            {
                cout << i - 1;
                return 0;
            }
            b[u] -- ;
            r /= 10;
        }
    }

    return 0;
}

 

二、路径

#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N = 3010;
int f[N];

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

int main()
{
    memset(f, 0x3f3f3f3f, sizeof f);
    int n = 2021;
    f[1] = 0;
    for(int i = 1; i <= n; i ++ )
        for(int j = 1; j < i; j ++ )
            if(i - j <= 21)
                f[i] = min(f[i], f[j] + i * j / gcd(i, j));
    cout << f[2021];

    return 0;
}

 

三、字符统计

#include<iostream>
using namespace std;
typedef long long ll;
int b[30];

int main()
{
    string s;
    cin >> s;
    int t = s.size();
    for(int i = 0; i < t; i ++ ) b[s[i] - 'A'] ++ ;
    int ma = 0;
    for(int i = 0; i < 26; i ++ ) ma = max(ma, b[i]);
    for(int i = 0; i < 26; i ++ )
        if(b[i] == ma) cout << (char)(i + 'A');

    return 0;
}

 

 

四、费用报销

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1010;
typedef pair<int, int> PII;
PII p[N];
int n, M, k;
int b1[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int s1[13];
int f[N][5010];
// v[i] - 物品体积+价值
// M - 背包总体积
bool cmp(PII x, PII y)
{
    return x.first < y.first;
}
int main()
{
    for(int i = 1; i <= 12; i ++ ) s1[i] = s1[i - 1] + b1[i];
    cin >> n >> M >> k;
    int x, y, z;
    for(int i = 1; i <= n; i ++ )
    {
        cin >> x >> y >> p[i].second;
        p[i].first = s1[x - 1] + y; 
    }
    sort(p + 1, p + n + 1, cmp);

    int l = 0;
    for(int i = 1; i <= n; i ++ )
    {
        while(p[i].first - p[l + 1].first >= k) l ++ ;
        for(int j = M; j >= p[i].second; j -- )
            if(j < p[i].second) f[i][j] = f[i - 1][j];
            else
            {
                f[i][j] = max(f[i - 1][j], f[l][j - p[i].second] + p[i].second);
            }
    }
    cout << f[n][M];

    return 0;
}

 

 

...全文
24 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,798

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧