自己写的老超时,没办法,只能看别人的代码= =没想到那么简单就实现了...
#include<iostream>
using namespace std;
int Account;
int cv[11],cn[11];
int value,num,sum;
void DFS(int step)
{
int i;
if(sum==value)
{
Account++;
return;
}
if(sum>value||step>num)
return;
DFS(step+1);
for(i=1;i<=cn[step];i++)
{
sum+=cv[step];
DFS(step+1);// 处理不同类型
}
for(i=1;i<=cn[step];i++)
sum-=cv[step];
}
int main()
{
bool flag=false;
while(cin>>value>>num)
{
int k;
sum=0;
Account=0;
for(k=1;k<=num;k++)
{
cin>>cv[k]>>cn[k];
}
DFS(1);//从只有一种卡片开始
if(flag)
cout<<endl;
flag=true;
cout<<Account<<endl;
}
return 0;
}