软妹买醉到可爱学弟的进阶转变

发布时间:2020-04-11 13:41:57
贴主:占明
热度:3
正在讨论:P1912 - 最小开支 题目传送门

占明 2020-04-11

设2人间要x个   再找出个一次函数f(x),然后再考虑x定义域的最大最小值就好了

(0)

占明 2020-04-11

再细致一点。。。。设二人间x三人间y  会有2x➕3y=m  总开支pay=ax+by 联立可以得到 pay=【(3a-2b)x+bm】/3。 

所以要分析3a-2b的正负,3a-2b为负的时候x取越大越好 ,3b-2b为正的时候x取越小越好

当总人数为奇数的时候,x的最大值为(m-3)/2,当总人数为偶数的时候,x的最大值为m/2

当总人数m%3==0的时候,像6(3+3),9(3+3)......,那x最小值是0;m%3==1的时候,像7(2+2+3),10(2+2+3+3)......那x最小值要为2;m%3==2的时候像8 (2+3+3),11(2+3+3+3).......,x最小值为1

endding~

(0)

占明 2020-04-11

            #include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        long long int m,a,b;
        cin>>m>>a>>b;
        long long int min,max;
        if(m&1)
        {
            max=(m-3)/2;
        }
        else
        {
            max=m/2;
        }
        
        if(m%3==0)
        {
            min=0;
        }
        else if(m%3==2)
        {
            min=1;
        }
        else
        {
            min=2;
        }
        
        if(m==2)
        {
            cout<<a<<endl;
        }
        else if(m==3)
        {
            cout<<b<<endl;
        }
        else
        {
        if(3*a==2*b)
        {
            cout<<b*m/3<<endl;
        }
        else if(3*a>2*b)
        {
            cout<<((3*a-2*b)*min+b*m)/3<<endl;
        }
        else
        {
            cout<<((3*a-2*b)*max+b*m)/3<<endl;
        }
        }
    }
    return 0;
}

        

(0)

Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1