Description
自从上次仓鼠中了1000万彩票后,彻底变成了土豪了,一群人愿意认他做干爹,仓鼠决定送他的干儿子每人一部iphone。仓鼠今天带了一群人去买iphone,每个人身上都背着一个大背包,只有3种背包,分别能装a,b,c个iphone,仓鼠希望每个人都能用iphone装满自己的背包。仓鼠有n个干儿子,也就是要买n部手机,仓鼠带了k个人去买手机,问是否存在一种情况能让每个买iphone的人的背包都装满
Input
输入包含多组测试数据,每组一行,包含5个整数n, k, a, b, c
(1 <= n, k , a, b, c <= 10000)
abc可以相同
Output
如果存在输出Yes,否则输出No
Sample Input
10 3 3 3 4 20 7 1 1 1 80 3 100 3 3 15 4 3 5 6
Sample Output
Yes No No Yes
HINT
样例一3个人分别带大小为 3 3 4的背包去买手机正好每个人都装满
样例二 很明显只有一种背包,全部都是1也无法买20部iphone
样例四 4个人分别带大小为 3 3 3 6的背包去买手机正好每个人都装满
设背了x个a,y个b,z个c包,z的取值范围是0~n/c,遍历相对应的x,y.
#include<iostream>
#include<cstdio>
#include<cmath>
int main(){
double n,k,a,b,c0;
int x,y,z,i,f;
while(scanf("%lf%lf%lf%lf%lf",&n,&k,&a,&b,&c)!=EOF){
f=0;
for(i=0;i<=n/c;i++){
z=i;
if(b-a==0) y=0;
else
y=(n-a*k+(a-c)*i)/(b-a);
x=k-i-y;
if(x<0 || y<0 || z<0)//避免出现负值
continue;
int kk=x+y+z;//kk是int 型 避免x,y是小数
int nn=a*x+b*y+c*z;
if(nn==n && kk==k){
f=1;
break;
}
}
if(f==1)
printf("Yes\n");
else
printf("No\n");
}
}