您的位置:首页 > 其它

杭电 acm 1085 Holding Bin-Laden Captive!

2015-10-21 10:22 375 查看
杭电 acm 1085 Holding Bin-Laden Captive!

思路很简单:

0)数组T[i]表示面额 i 是否能组成。

1)先用硬币面额1(num_1个)的,看看组成哪些面额(1~num_1);

2)再加上面额为2(num_2个)的,,两层循环,外层为使用 j 个面额为2的硬币,内层将之前使用1组成的所有加 2*j 置为true,表示这个面额可以实现了 ;

3)再加上面额为5(num_5个)的,如同步骤2,;

#include <iostream>
#include <cstring>
using namespace std;
const int NUM=10000+10;

bool T[NUM];//用于标志第i位是否能组成

int main()
{
int a,b,c;
while(cin>>a>>b>>c)
{
if(a==0&&b==0&&c==0)break;

memset(T,0,sizeof(bool)*NUM);
memset(t,0,sizeof(bool)*NUM);
//只有1时
for(int i=0 ;i<=a ;++i)
{
T[i]=true;
}

//加上2
for(int i=0; i<=b; i++)
{
for(int j=0;j<=a;++j)
{
if(T[j])T[j+i*2]=true;
}
}

//加上5
for(int i=0; i<=c; i++)
{
for(int j=0;j<=a+2*b ;++j)
{
if(T[j])T[j+i*5]=true;
}
}

for(int i=0;i<=a+b*2+5*c+1;++i)
{
if(!T[i])
{
cout<<i<<endl;
break;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: