版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lv414333532/article/details/79961935
ldq 的遗产
Time Limit: 10000 ms
Memory Limit: 65536 KiB
Problem Description
我,李东庆,打钱!!!
ldq最近很无聊,于是他把自己投身到一些数学问题中,他说如果有人能解决他的问题,他就会把他从梁山那里继承的遗产全都给你!他坚信没人能解决他的问题,因此也就从他那里拿不到一分钱。
哈哈!显然,ldq对自己的才智过于骄傲!但是,他的问题是什么?
“现在有一些硬币(三种类型, 1, 2, 5),其数量是num_1,num_2和num_5,请输出用这三种硬币不能组成的最小钱数。”
你,超级ACMer,应该很容易解决这个问题,如果你解决了这个问题,别忘了从ldq那里拿25,000,000美元!
Input
输入包含多个测试用例。
首先输入一个T(1<=T<=10)代表测试组数
每个测试用例包含3个正整数num_1,num_2和num_5
(0 <= num_i < = 100)。
Output
输出一个整数y,代表 用现有的这三种硬币不能组成的最小钱数。
Sample Input
2 1 1 3 0 0 0
Sample Output
4 1
Hint
Source
axuhongbo
思路:三重for循环暴力出所有能够组合出的结果,标记,扫描找为被标记;
#include <iostream>
#include <cstring>
using namespace std;
int A[10000];
int main()
{
int n, num_1,num_2,num_5;
int MAX,tmp;
while(cin>>n)
{
while(n--)
{
cin>>num_1>>num_2>>num_5;
MAX=5*num_5+3*num_2+num_1;
memset(A,0,sizeof(A));
for(int i=0; i<=num_1; i++)
{
for(int j=0; j<=num_2; j++)
{
for(int k=0; k<=num_5; k++)
{
tmp=i+j*2+k*5;
A[tmp]=1;
}
}
}
for(int i=1; i<MAX; i++)
{
if(!A[i])
{
tmp=i;
cout<<i<<endl;
break;
}
}
if(tmp==MAX)
{
cout<<MAX+1<<endl;
}
}
}
return 0;
}