Ural 1430. Crime and Punishment(数论)
2014-01-23 23:50
375 查看
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1430
题意: 求x,y使得ax + by <= n (x>=0, y>=0)且ax+by尽量大。
思路:
假设a > b,只需要暴力枚举x判断即可,上限top为min(n/a, b),复杂度是O(sqrt(n))的。
证明很简单,如果x > b则可以写成 a(x + b) + by = ax + ab + by = ax + b(a+y),这里的x < b,即这种情况肯定是枚举到了的,所以上限设为min(n/a, b)。
code:
题意: 求x,y使得ax + by <= n (x>=0, y>=0)且ax+by尽量大。
思路:
假设a > b,只需要暴力枚举x判断即可,上限top为min(n/a, b),复杂度是O(sqrt(n))的。
证明很简单,如果x > b则可以写成 a(x + b) + by = ax + ab + by = ax + b(a+y),这里的x < b,即这种情况肯定是枚举到了的,所以上限设为min(n/a, b)。
code:
#include #include #include #include using namespace std; int main() { int a, b, n, mx = 0, x = 0, y = 0; cin>>a>>b>>n; if(a > b) { int top = min(n/a, b); for(int i = 0;i <= top; i++) { int cur = (n-a*i)/b*b + a*i; if(cur > mx) { mx = cur;x = i; y = (n-a*i)/b; } } } else { int top = min(n/b, a); for(int i = 0;i <= top; i++) { int cur = (n-b*i)/a*a + b*i; if(cur > mx) { mx = cur;x = (n-b*i)/a; y = i; } } } cout<
相关文章推荐
- URAL 1430. Crime and Punishment(数论)
- Ural 1430. Crime and Punishment
- URAL 1430 Crime and Punishment
- 1430. Crime and Punishment(枚举)
- 1430. Crime and Punishment
- Crime and Punishment
- Ural2102:Michael and Cryptography(数论&素数)
- 1.4 Crime and Punishment
- Ural 1277 Cops and Thieves(最小点割集/最小割)
- CodeForces 449 C.Jzzhu and Apples(构造+数论)
- Is punishment necessary to help children learn the difference between right and wrong?
- URAL 1960- Palindromes and Super Abilities (回文树)
- URAL 1960 Palindromes and Super Abilities (回文树)
- URAL 2019. Pair: normal and paranormal(***栈模拟)
- URAL1014 - Product of Digits - 数论
- lightoj1282:Leading and Trailing(数论)
- 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)
- CodeForces 679A Bear and Prime 100【交互题+数论】
- 【CF559C】 Gerald and Giant Chess(计数,方案数DP,数论)
- ural Mnemonics and Palindromes (dp)