长春理工大学第十四届程序设计竞赛(重现赛)J.Printout

链接:https://ac.nowcoder.com/acm/contest/912/J

题意:

小r为了打校赛,他打算去打字社打印一份包含世界上所有算法的模板。

到了打字社,小r一看价格:总打印页数X0X0页以下(不含X0X0)x0x0元每页,X0X1X0∼X1页(不含X1X1)x1x1元每页,X1X2X1∼X2页(不含X2X2)x2x2元每页,X2X3X2∼X3页(不含X3X3)x3x3元每页,X3X4X3∼X4页(不含X4X4)x4x4元每页……

小r转念一想,他可以多放一些白纸在模板里面,还能花更少的钱。

给出小r要打印的模板页数n以及价格列表X和x,小r想知道他打印的最少花费为多少钱?

注意:小r只能打印一次,不能将一篇文章分多次打印。

思路:

先找出第一个满足的,再挨个往后找全部,纸张不断增加,取最小值即可。

代码:

#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long LL;
const int MAXN = 1e3 + 10;
const int MOD = 1e9 + 7;
int n, m, k, t;
 
int pages[MAXN];
double money[MAXN];
 
int main()
{
    cin >> n >> m;
    for (int i = 1;i <= m;i++)
        cin >> pages[i];
    for (int i = 1;i <= m;i++)
        cin >> money[i];
    int i = 1;
    double res;
    for (i = 1;i <= n;i++)
        if (pages[i] > n)
        {
            res = n*money[i];
            break;
        }
    for (i++;i <= m;i++)
    {
        res = min(res, 1.0*pages[i-1]*money[i]);
    }
    cout << res << endl;
 
    return 0;
}

  

原文地址:https://www.cnblogs.com/YDDDD/p/10992204.html