zoukankan      html  css  js  c++  java
  • 一起去打CS

    一起去打CS

    题目描述:
    早就和lyk约好了去打cs,一直没找着时间,终于今天我家没人,他家也没人,总算可以出去了。但是偏偏天公不作美,某某人非要留那么多题要做。没办法只能尽快做完然后抓紧时间吧……
    为了尽量节省时间,我俩决定分开做所有题吧(嘿嘿,稍微耍一下滑~~)。但是有的题我比较擅长,而有的题lyk要比我做的快。所以为了尽快做完所有的题,我们要好好的分配一下。现在给出你要做题 的数目和我俩分别做每个题所需要的时间。希望你帮忙计算一下,我们最少需要多长时间才能做完所有的题去打cs啊!!!
    输入描述:
    第一行一个正整数n,表示有n个题要做。
    接下来有n行,每行两个正整数ai,bi。 分别表示我和lyk做每个题所用的时间。
    输出描述:
    一个数,最少需要多长时间才能去打CS。
    样例输入:
    3
    5 10
    6 11
    7 12
    样例输出:
    12
    数据范围及提示:
    30%的数据满足:1 <= n <= 20
    100%的数据满足:1 <= n <= 200 , 1 <= ai,bi <=200
    思路:
    动态规划
    状态:f[i][j]记录前i个题a做j分钟b的最少用时。
    转移:f[i][j]=min(f[i-1][j-a],f[i-1][j]+b。
    f[i-1][j-a]为选择a,f[i-1][j]+b为选择b。
    最后对于f[n]枚举a的做题时间更新答案 。

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int maxn=201;
    int n,a,b,sum,ans=maxn*maxn*maxn,f[maxn][maxn*maxn];
    int main()
    {
        memset(f,127/3,sizeof(f));
        f[0][0]=0;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a>>b;
            sum+=b;
            f[i][0]=sum;
            for(int j=0;j<=40000;j++)
            if(j>=a)
            f[i][j]=min(f[i-1][j-a],f[i-1][j]+b);
            else
            f[i][j]=f[i-1][j]+b;
        }
        for(int k=1;k<=40000;k++)
        ans=min(ans,max(k,f[n][k]));
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070991.html
Copyright © 2011-2022 走看看