zoukankan      html  css  js  c++  java
  • 牛客多校Round 3

    Solved:2

    rank:306

    跑路场.....

    A.PACM team 

    简单背包记录路径都写挂 退役算了

    #include <bits/stdc++.h>
    using namespace std;
    
    int p[40];
    int a[40];
    int c[40];
    int m[40];
    int g[40];
    int dp[37][37][37][37];
    int vis[40];
    
    int main()
    {
        int n;
        scanf("%d", &n);
        for(int i = 1; i <= n; i++)
            scanf("%d%d%d%d%d", &p[i], &a[i], &c[i], &m[i], &g[i]);
        int P, A, C, M;
        scanf("%d%d%d%d", &P, &A, &C, &M);
    
        for(int i = 1; i <= n; i++)
        {
            for(int i1 = P; i1 >= p[i]; i1--)
                for(int i2 = A; i2 >= a[i]; i2--)
                    for(int i3 = C; i3 >= c[i]; i3--)
                        for(int i4 = M; i4 >= m[i]; i4--)
                            dp[i1][i2][i3][i4] = max(dp[i1][i2][i3][i4], dp[i1 - p[i]][i2 - a[i]][i3 - c[i]][i4 - m[i]] + g[i]);
        }
    
        int cnt = 0;
        int tmp = P, tma = A, tmc = C, tmm = M;
        for(int i = n; i >= 1; i--)
        {
            if(tmp < p[i] || tma < a[i] || tmc < c[i] || tmm < m[i]) continue;
    
            if(dp[tmp][tma][tmc][tmm] == dp[tmp - p[i]][tma - a[i]][tmc - c[i]][tmm - m[i]] + g[i])
            {
                vis[i] = 1; cnt++;
                tmp -= p[i];
                tma -= a[i];
                tmc -= c[i];
                tmm -= m[i];
            }
        }
        printf("%d
    ", cnt);
        for(int i = 1; i <= n; i++)
        {
            if(vis[i])
            {
                cnt--;
                if(cnt) printf("%d ", i - 1);
                else printf("%d
    ", i - 1);
            }
        }
    
        return 0;
    }
    View Code

    E.Sort String 

    next数组的应用

    #include <bits/stdc++.h>
    using namespace std;
    
    char s[1000005];
    int nex[1000005];
    void getfail(char *s, int* f)
    {
        f[0] = f[1] = 0;
        int len = strlen(s);
        for(int i = 1; i < len; i++)
        {
            int j = f[i];
            while(j && s[i] != s[j]) j = f[j];
            f[i + 1] = s[i] == s[j] ? j + 1 : 0;
        }
    }
    
    int main()
    {
        scanf("%s", s);
        getfail(s, nex);
        int len = strlen(s);
    
        if(len % (len - nex[len]) == 0 && len / (len - nex[len]) != 1)
        {
            int cir = len - nex[len];
            int cn = len / cir;
            printf("%d
    ", cir);
            for(int j = 0; j < cir; j++)
            {
                printf("%d", cn);
                for(int k = j; k < len; k += cir)
                    printf(" %d", k);
                puts("");
            }
        }
        else
        {
            printf("%d
    ", len);
            for(int i = 0; i < len; i++)
                printf("%d %d
    ", 1, i);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    gRPC详解
    vue 实现无限向上滚动
    vue 封装highcharts组件
    《数据结构与算法之美》32——分治算法
    《数据结构与算法之美》31——贪心算法
    《数据结构与算法之美》30——回溯算法
    《数据结构与算法之美》29——动态规划实战
    《数据结构与算法之美》28——动态规划理论
    《数据结构与算法之美》27——初识动态规划
    《数据结构与算法之美》26——广度优先搜索与深度优先搜索
  • 原文地址:https://www.cnblogs.com/lwqq3/p/9376259.html
Copyright © 2011-2022 走看看