1 条题解
-
0
自动搬运
来自洛谷,原作者为

lzqy_
生而绚烂,璀璨如花。搬运于
2025-08-24 22:18:21,当前版本为作者最后更新于2020-03-08 09:09:17,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
和我一样初学OI的新手看过来了,不用算法、不用DP、不用循环甚至变量都只需两个!!!
最无脑代码推导过程:
我们一个一个条件地分析:
1、要花光所有的钱:
首先,三种文具的价格是,通过证明,发现除了,,以外,任何的价格都可以被花光,所以这个条件并没有什么太大的约束力;
2、尽量配成更多套
一套的价钱是元,所以这个规定就是要我们尽可能地买更多的整元;
3、尽量买更多的物品 :
这个规定其实就是在我们买了尽可能多的整元之后,剩余的钱再尽量拆分成元或元(因为,这样买的物品数量就会减少,所以不买元的东西)
好了,题目分析完了,我们归纳一下:
ans=n/14; n%=14; if(n==?) { cout<<ans<<" "<<ans+?<<" "<<ans+?; return 0; } if(n==?) · · · · (注:由于是伪代码,所以?处是代表一个数字)
看见了吗?其实这道题就是一个除法,再加上好多个就解决了。。。
但是细心的朋友可能会发现,这个算法有一个漏洞:
如果买完尽量多的套数以后,剩下的是元呢?这样不就不满足第一个条件了吗?
不用担心,这个问题很简单,我们只需要少配一套物品,再拿出14元来,不就可以花完钱了吗?
所有的问题都处理完了,无算法、无dp甚至无循环的代码就出现了:
#include <bits/stdc++.h> using namespace std; int main() { int n,ans=0;//ans用来记录套数 cin>>n; if(n==0)//若n=0,则直接输出答案; { cout<<0<<" "<<0<<" "<<0; return 0; } if(n<6 && n!=4 && n!=3)//若n无法分完,则直接输出答案; { printf("-1"); return 0; } ans=n/14; n%=14;//本代码的核心部分(个人觉得),求套数 if(n<6 && n!=4 && n!=3 && n!=0) ans--,n+=14;//若在套数最多时n分不完,套数-1; if(n==0)//若正好分完,直接输出三个套数 { cout<<ans<<" "<<ans<<" "<<ans<<endl; return 0; } //准备,最长if特判就要来了: if(n==3) { cout<<ans<<" "<<ans<<" "<<ans+1<<endl; return 0; } if(n==4) { cout<<ans<<" "<<ans+1<<" "<<ans<<endl; return 0; } if(n==6) { cout<<ans<<" "<<ans<<" "<<ans+2<<endl; return 0; } if(n==7) { cout<<ans<<" "<<ans+1<<" "<<ans+1<<endl; return 0; } if(n==8) { cout<<ans<<" "<<ans+2<<" "<<ans<<endl; return 0; } if(n==9) { cout<<ans<<" "<<ans<<" "<<ans+3<<endl; return 0; } if(n==10) { cout<<ans<<" "<<ans+1<<" "<<ans+2<<endl; return 0; } if(n==11) { cout<<ans<<" "<<ans+2<<" "<<ans+1<<endl; return 0; } if(n==12) { cout<<ans<<" "<<ans<<" "<<ans+4<<endl; return 0; } if(n==13) { cout<<ans<<" "<<ans+1<<" "<<ans+3<<endl; return 0; } if(n==15) { cout<<ans<<" "<<ans<<" "<<ans+5<<endl; return 0; } if(n==16) { cout<<ans<<" "<<ans+1<<" "<<ans+4<<endl; return 0; } if(n==19) { cout<<ans<<" "<<ans+1<<" "<<ans+5<<endl; return 0; } //是的,这样就没了(亲测,可以AC) return 0; }代码虽长,但是思路任何人都可以明白,并且只要在整型范围内,都可以秒解。
写题解不易,觉得好的,留个赞再走呗~
- 1
信息
- ID
- 5220
- 时间
- 1000ms
- 内存
- 250MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者