爱奇艺的自制节目

https://nanti.jisuanke.com/t/A1011

题目思路比较简单,关键字是枚举和贪心。

w和x是固定的。只有y和z可以组合出各种情况。

如果以再将a固定,即每次将n个y用a演播室录,剩下ey-n个用b,则很简单就能判断出此种情况下的最短时间。

时间复杂度为O(n);

1ll<<60表示 longlong int型的最大值; 1ll代表longlong 整形的数值1; 

#include<iostream>
#define INF 1ll<<60
using namespace std;
typedef long long ll;
int n; ll M = INF;
int main()
{
    cin >> n;
    ll ew, ex, ey, ez, w, x, y, z;
    for (ll i = 0; i < n; i++)
    {
        cin >> ew >> ex >> ey >> ez >> w >> x >> y >> z;

        for (ll k = 0; k <= ey; k++)//y节目在演播室a的天数
        {
            ll a = k * y + ew * w;
            ll b = (ey - k)*y + ex * x;
            if (a < b) { ll s = a; a = b; b = s; }
            ll temp = (a - b)/z;
            if (temp >= ez) {
                if (M > a) M = a;
            }
            else
            {
                ll t = (ez - temp) / 2;
                ll la = a + t * z;
                ll lb = b + (t + 1+temp)*z;//此处括号了少加了个temp忘了把少的那部分补全
                if ((ez - temp) % 2)
                {
                    if (M > lb)M = lb;
                }
                else
                {
                    if (M > la) M = la;
                }
            }

        }
        cout << M << endl; M = INF;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/worldcreator-zh/p/10503458.html