http://acm.timus.ru/problem.aspx?space=1&num=1430
先让 a 变成较大的那个
1,a 的个数 不会超过 n/a
2,a 的个数也可以不超过 b ,如果超过 b个a 可以由 a个b 代替 从而减轻了 a 的个数过大的负担
然后枚举 a 的个数
因为 a 变成较大的那个 所以 min(n/a,b) 比较小
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<map> #include<queue> #include<stack> #include<cmath> #define LL long long //#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const int INF=0x3f3f3f3f; int main() { //freopen("data.txt","r",stdin); LL a,b,n; while (cin>>a>>b>>n) { bool change= false ; if (a<b) {change= true ;swap(a,b);} LL k1,k2,MAX=-1; for (LL i=0;i<=min(n/a,b);++i) { LL j=(n-i*a)/b; if (i*a+j*b>MAX) { MAX=i*a+j*b; k1=i; k2=j; } } if (change) swap(k1,k2); cout<<k1<< " " <<k2<<endl; } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步