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;
    }
    
  • 相关阅读:
    apache http server 和tomcat的区别 以及nginx
    2020-2-12 这样提升自己的口才
    两种常用的队列
    栈的实现与应用
    线性表
    Nginx实现虚拟主机
    将apache添加到服务
    apache安装
    最小生成树
    图的深度优先搜索
  • 原文地址:https://www.cnblogs.com/zhanggengchen/p/11431749.html
Copyright © 2011-2022 走看看