• vijos 1907 飞扬的小鸟


    我心里毫无波动甚至还有点想笑。

    WTF

    WTF

    WTF

    WTF

    WTF

    WTF

    WTF

    GTMD调了一天什么鬼啊。

    原来更新的范围有讲究啊。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define inf 1000000007
    using namespace std;
    int n,m,k,x[10050],y[10050],dp1[10050][1050],dp2[10050][1050],ret=0,ans1=0,mx[10050],ans2=inf;
    struct pnt
    {
        int p,l,h;
    }p[10050];
    bool vis[10050][1050];
    bool cmp(pnt x,pnt y)
    {
        return x.p<y.p;
    }
    bool fail_all(int x)
    {
        for (int j=1;j<=m;j++)
            if (dp2[x][j]!=inf) return false;
        return true;    
    }
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for (int i=1;i<=n;i++) scanf("%d%d",&x[i-1],&y[i-1]);
        for (int i=1;i<=k;i++)
            scanf("%d%d%d",&p[i].p,&p[i].l,&p[i].h);
        sort(p+1,p+k+1,cmp);
        for (int i=1;i<=m;i++) vis[0][i]=true;
        for (int i=1;i<=n;i++)
        {
            while ((p[ret+1].p<=i) && (ret<=k-1)) ret++;
            int l,r;
            if (p[ret].p==i) {l=p[ret].l+1;r=p[ret].h-1;}
            else l=0,r=m;
            int limit=1;if (p[ret].p==i-1) limit=p[ret].l+1;
            for (int j=1;j<=m;j++) dp2[i][j]=inf;
            for (int j=1;j<=m-1;j++)
            {
                if (((vis[i][j-x[i-1]]) || (vis[i-1][j-x[i-1]])) && (j>x[i-1]))
                {
                    dp1[i][j]=max(dp1[i-1][j-x[i-1]],dp1[i][j-x[i-1]]);
                    dp2[i][j]=min(dp2[i][j],dp2[i][j-x[i-1]]+1);
                    dp2[i][j]=min(dp2[i][j],dp2[i-1][j-x[i-1]]+1);
                    vis[i][j]=true;
                }
            }
            for (int j=1;j<=m-1;j++)
            {
                if ((j+y[i-1]<=m) && (vis[i-1][j+y[i-1]]))
                {
                    dp1[i][j]=max(dp1[i][j],dp1[i-1][j+y[i-1]]);
                    dp2[i][j]=min(dp2[i][j],dp2[i-1][j+y[i-1]]);
                    vis[i][j]=true;
                }
            }
            for (int j=1;j<=m;j++)
            {
                if (vis[i-1][j])
                {
                    int ret;
                    dp1[i][m]=max(dp1[i][m],dp1[i-1][j]);
                    if ((m-j)%x[i-1]) ret=(m-j)/x[i-1]+1;
                    else if (m==j) ret=1;
                    else ret=(m-j)/x[i-1];
                    dp2[i][m]=min(dp2[i][m],dp2[i-1][j]+ret);
                    vis[i][m]=true;
                } 
            }
            for (int j=0;j<=l-1;j++) {vis[i][j]=false;dp2[i][j]=inf;}
            for (int j=r+1;j<=m;j++) {vis[i][j]=false;dp2[i][j]=inf;}
            for (int j=1;j<=m;j++)
                if (vis[i][j])
                    {
                        dp1[i][j]+=(p[ret].p==i);
                        ans1=max(ans1,dp1[i][j]);
                    }
            if (vis[i][m]) ans1=max(ans1,dp1[i][m]);
            if (fail_all(i))
            {
                printf("0
    %d
    ",ans1);
                return 0;
            }
        }
        for (int i=0;i<=m;i++)
            if (vis[n][i]) ans2=min(ans2,dp2[n][i]);
        printf("1
    %d
    ",ans2);
        return 0;
    }
  • 相关阅读:
    单独使用mybatis创建多数据源
    【mybatis-oracle】批量插入、批量删除以及xml文件大于号 小于号处理
    让只连了内网某台机器A的机器B能上外网
    python类静态函数和变量,heapq自定义优先级队列
    git 的基础
    Java线程池
    ansible 管理工具
    理解容器跨主机通信一
    Java多线程的实现方式二
    单机容器网络
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6060072.html
Copyright © 2020-2023  润新知