• 【洛谷P1800】software_NOI导刊2010提高(06)


    题目描述

    一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。写一个程序,求出公司最早能在什么时候交付软件。

    输入输出格式

    输入格式:

    输入文件第一行包含两个由空格隔开的整数n和m,其中1<=n<=100,1<=m<=100,接下来的n行每行包含两个用空格隔开的整数d1和d2,d1表示该技术人员完成第一个软件中的一个模块所需的天数,d2表示该技术人员完成第二个软件中的一个模块所需的天数,其中1<= d1,d2<=100。

    输出格式:

    输出文件仅有一行包含一个整数d,表示公司最早能于d天后交付软件。

    输入输出样例

    输入样例#1:
    3 20
    1 1
    2 4
    1 6
    
    输出样例#1:
    18

    说明

    【样例】

    最快的方案是第一个技术人员完成第二个软件的18个模块,用时18天,第三个技术人员完成第一个软件的18个模块,用时18天,其余的模块由第二个技术人员完成,用时12天,做完所有模块需要18天。如果第一个技术人员完成第二个软件的17个模块,第三个技术人员完成第一个软件的17个模块,其余的模块由第二个技术人员完成,需要用时18天,做完所有模块仍然需要18天,所以少于18天不可能做完所有模块。

    分析

    二分+dp

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=100+5;
    inline int read()
    {
        int x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    int n,m,ans;
    int d[maxn][2],f[maxn][maxn];
    bool dp(int x)
    {
        memset(f,-0x3f,sizeof(f));//防止从无效的状态转移
        f[0][0]=0;
        for(int i=1;i<=n;i++)
        for(int j=0;j<=m;j++)
        for(int k=0;k<=x/d[i][0];k++) if(j-k>=0)
        f[i][j]=max(f[i][j],f[i-1][j-k]+(x-k*d[i][0])/d[i][1]);
        return f[n][m]>=m;
    }
    int main()
    {
        n=read();m=read();
        for(int i=1;i<=n;i++)
            d[i][0]=read(),d[i][1]=read();
        int l=0,r=10000;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(dp(mid)) {ans=mid; r=mid-1;}
            else l=mid+1;
        }
        printf("%d
    ",ans);
    }
        
    欢迎转载,转载请注明出处!
  • 相关阅读:
    Android Studio的git功能的使用介绍
    如何用Android Studio同时使用SVN和Git管理项目
    【.NET深呼吸】动态类型(扩充篇)
    【.net深呼吸】动态类型(高级篇)
    【.net深呼吸】动态类型(娱乐篇)
    VS 2015相当不错的功能:C#交互窗口
    计算照片的面积(WPF篇)
    计算照片的面积(UWP篇)
    【Win 10应用开发】把文件嵌入到XML文档
    【.NET深呼吸】基础:自定义类型转换
  • 原文地址:https://www.cnblogs.com/huihao/p/7454759.html
Copyright © 2020-2023  润新知