试题编号: | 201709-1 |
试题名称: | 打酱油 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。
输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。 输出格式 输出一个整数,表示小明最多可以得到多少瓶酱油。
样例输入 40 样例输出 5 样例说明 把40元分成30元和10元,分别买3瓶和1瓶,其中3瓶送1瓶,共得到5瓶。
样例输入 80 样例输出 11 样例说明 把80元分成30元和50元,分别买3瓶和5瓶,其中3瓶送1瓶,5瓶送2瓶,共得到11瓶。 |
题目分析:
每个30元,都可以有4瓶;每个80元都有11瓶;
在超过50元的情况下,钱有两种分配方式,一种是分出30,另一种是分出80,递归取最大值;
# include<iostream>
# include<cstdio>
# include<cstdlib>
# include<cstring>
# include<string>
# include<cmath>
# include<algorithm>
using namespace std;
int solve(int n)
{
if(n < 50)
{
if(n < 30)
return n/10;
else
return 4 + (n-30)/10;
}
else
{
return max(4 + solve(n-30),7+solve(n-50));
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",solve(n));
return 0;
}
这种方法怎么说。。。算是暴力解决
# include<cstdio>
int main()
{
int n,nw,ns,res;
scanf("%d",&n);
nw = n / 50;
ns = n %50 / 30;
res = n%50%30/10;
printf("%d\n",nw*7 + ns*4 + res);;
return 0;
}