zoukankan      html  css  js  c++  java
  • HDU6651 Final Exam

    题意

    n个题一共m分,出题人可以任意分配每个题的分数,对于x分的题,需要复习x+1分钟,问如果能做出k道题最少需要几分钟。

    思路

    利用田忌赛马的思路,出题人至少要赢下n-k+1局,最优策略是先用0分的题和最大的k-1个数比较,集中兵力赢下n-k+1局,作为做题人,我们如果想要阻止出题人,需要在最少的n-k+1个题分配m+1分钟,这样无论如何出题人用m分钟无法赢下这n-k+1局。问题转化为如何用最小的时间,使得任意k个数的和大于等于m+1。令x=(m+1)/(n-k+1),若不能整除,剩下k-1个数填x+1,否则剩下k-1个数填x就足够了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    
    LL n,m,k;
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while (T--)
        {
            scanf("%lld%lld%lld",&n,&m,&k);
            LL x=(m+1)/(n-k+1);
            LL ans;
            if ((m+1)%(n-k+1)==0) ans=(k-1)*x+m+1; else ans=(k-1)*(x+1)+m+1;
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    MvvmTest
    win8 app 相关的几个网站
    autp
    分析WPF代码工具
    mdsn
    线程和委托
    C#guanli
    学习Boost小结(一)
    Boost.test库的配置
    自己真是太没正事了.
  • 原文地址:https://www.cnblogs.com/zhanggengchen/p/11431749.html
Copyright © 2011-2022 走看看