在做题之前,我先给大家一个礼物
礼物
我发现有一些题很好笑,就是他让谁谁谁去买东西或者干什么事,但是却要让我们来解决这个问题
所以呢,今天这道题,就是小明去买文具(P6188)
小明的班上共有 nn 元班费,同学们准备使用班费集体购买 33 种物品:
小明负责订购文具,设圆规,笔,笔记本的订购数量分别为 a,b,ca,b,c,他订购的原则依次如下:
请你帮助小明求出满足条件的最优方案。可以证明若存在方案,则最优方案唯一。
输入仅一行一个整数,代表班费数量 nn。
如果问题无解,请输出 -1−1。
否则输出一行三个用空格隔开的整数 a, b, ca,b,c,分别代表圆规、笔、笔记本的个数。
输入 #1
1
输出 #1
-1
输入 #2
14
输出 #2
1 1 1
输入 #3
33
输出 #3
1 2 6
样例输入输出 3 解释
a=2,b=4,c=1a=2,b=4,c=1 也是满足条件 1,21,2 的方案,但对于条件 33,该方案只买了 77 个物品,不如 a=1,b=2,c=6a=1,b=2,c=6 的方案。
好了,其实这道题有很多思路,像是我刚开始想要三重循环:
#include
using namespace std;
int n;
int a,b,c;
int minmax_=0;
int summax_=0;
int ans[3]={-1,-1,-1};
int main(){
cin>>n;
if(n==0){
cout<<0<<" "<<0<<" "<<0;
return 0;
}
for(a=0;asummax_){
summax_=sum;
ans[0]=a;
ans[1]=b;
ans[2]=c;
}
if(minmax_
结果很棒!
那当然改进一下,但是又发现改进完也就是少了一个TLE;
所以我想到了一个暴力好用的办法!
我们可以找规律:
#include
using namespace std;
int n;
int a,b,c;
int ans[14][3]={
0,0,0,
-1,-1,4,
-1,0,3,
0,0,1,
0,1,0,
-1,0,4,
0,0,2,
0,1,1,
0,2,0,
0,0,3,
0,1,2,
0,2,1,
0,0,4,
0,1,3
};
int main(){
cin>>n;
if(n==0){
cout<<0<<" "<<0<<" "<<0;
return 0;
}
if(n==1||n==2||n==5){
cout<<-1;
return 0;
}
int ans_=n/14;
int m=n%14;
cout<
就是用套数加上规律,就AC了!
记得关注、收藏、点赞!!!