洛谷题解P6188 [NOI Online #1 入门组]文具订购

( ext{Update On 2020.10.6}) 鉴于之前的题解写的不好,进行了重做

原题传送门

( ext{Solution})

首先想到的是 (O(n^3)) 的暴力。可是数据范围 (0≤n≤10^5) (又不是清北神机) 显然会 ( ext{TLE})

所以说要对这个暴力进行优化。

不难发现,在订购的原则里

(7a+4b+3c=n)
(a,b,c) 中的最小值尽可能大

最小值最大换句话来说就是 ( o a,b,c的值尽量平均)
不妨设 (a=b=c) ,此时关于 (a,b,c) 的方程 (7a+4b+3c=n) 的解为 (a=b=c=frac{n}{14})

订购原则还有一句话:

(a+b+c) 尽可能大

所以,我们可以 a从 (frac{n}{14}) 开始 从大到小 枚举 (尽可能大,从大到小更快出结果)
(b) 边界 (frac{n}{4})
(c) 边界 (frac{n}{3})

(Code)

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int main(){
    scanf("%d",&n);
    if(n==0){      //一定注意特判 0 的情况
        cout<<"0 0 0"<<endl;
        return 0;
    }
    for(int i=n/14;i>=0;i--){      //a
    	for(int j=i;j<=n/4;j++){      //b
    		for(int l=i;l<=n/3;l++){      //c
    			if(i*7+j*4+l*3==n){      
    				printf("%d %d %d",i,j,l);
    				return 0;
				}
			}
		}
	}
    printf("-1");
    return 0; 
}
本文欢迎转载,转载时请注明本文链接
原文地址:https://www.cnblogs.com/-pwl/p/12524440.html