zoukankan      html  css  js  c++  java
  • dp

    题目描述:

     

     

     

     

     AC代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=10005,maxm=1005;
    int n,m,p;
    int clic[maxn],uncl[maxn],L[maxn],H[maxn];
    int f[maxn][maxm],cnt,INF;
    inline int read()
    {
        int x = 0; 
        char ch = getchar();
        while(ch < '0' || ch > '9') 
            ch = getchar();
        while(ch >= '0' && ch <= '9') 
        {
            x = x * 10 + ch - '0';
            ch = getchar();
        }
        return x;
    }
    
    int main()
    {
        n = read();
        m = read();
        p = read();
        for(int i = 1;i <= n;i++) 
        {
            clic[i] = read();
            uncl[i] = read();
        }
        for(int i = 1;i <= n;i++) 
        {
            L[i] = 0;
            H[i] = m + 1;
        }
        for(int i = 1;i <= p;i++)
        {
            int x = read();
            L[x] = read();
            H[x] = read();
        }
        memset(f,63,sizeof(f));
        INF = f[0][0];
        cnt = 0;
        for(int i = 0;i <= m;i++)
            f[0][i] = 0;
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j < H[i];j++) 
                if(j >= clic[i] && j != m)
                    f[i][j] = min(f[i][j],min(f[i - 1][j - clic[i]] + 1,f[i][j - clic[i]] + 1));
            for(int j = 1;j < H[i];j++) 
                if(j + uncl[i] <= m && j >= L[i] + 1)
                    f[i][j] = min(f[i][j],f[i - 1][j + uncl[i]]);
                if(H[i] == m + 1)
                    for(int j = m;j >= max(1,m - clic[i]);j--) 
                        f[i][m] = min(f[i][m],min(f[i - 1][j] + 1,f[i][j] + 1));
            bool flythr = 0;
            for(int j = L[i] + 1;j < H[i];j++) 
                if(f[i][j] < INF)
                {
                    flythr=1; 
                    break;
                }
            for(int j = 0;j <= L[i];j++) 
                f[i][j] = INF;
            if(!flythr)
            {
                printf("0
    %d",cnt);
                return 0;
            }
            if(L[i] > 0 || H[i] < m) 
                cnt++;
        }
        int ans = 1 << 30;
        for(int i = 1;i <= m;i++) 
            ans = min(ans,f[n][i]);
        printf("1
    %d",ans);
        return 0;
    }

    dpdpdp!!!

  • 相关阅读:
    ACID
    Elasticsearch SQL
    【协议】AAA Radius协议的常用报文分析
    【linux】内核-模块(驱动)命令原理
    【linux】masm汇编系统调用说明
    pytest 8+.yaml文件详解---实现接口自动化
    谷歌 Chrome 浏览器将迎来设计、媒体播放控件改进
    长期免费的通配符证书获取 2021年最新方法
    Flink:部署运行
    Linux:nc命令
  • 原文地址:https://www.cnblogs.com/biaobiao88/p/12105230.html
Copyright © 2011-2022 走看看