给出要交换的卡片价值n,然后给出m个卡片,每个卡片的价值和数目,问你能有多少种来组成一个n
dfs往后搜索,dfs(left,index)从index往后搜,left是剩余的价值,if(left==0)种类++;
最蛋疼的是输出格式,让我纠结了一小会儿,PE了3次
#include <stdio.h>
#include <string.h>
struct cost{
int v,cnt;
}costs[20];
int val,n,num;
void dfs(int left,int index)
{
if(left==0){num++ ;return ;}
for(int i=index;i<n;i++)
{
if(costs[i].cnt>0&&left>=costs[i].v)
{
costs[i].cnt--;
dfs(left-costs[i].v,i);
costs[i].cnt++;
}
}
}
int main()
{
bool flag=true;
while(scanf("%d%d",&val,&n)!=EOF)
{
num=0;
for(int i=0;i<n;i++)
scanf("%d%d",&costs[i].v,&costs[i].cnt);
dfs(val,0);
if(!flag)printf("\n");
if(flag)flag=false;
printf("%d\n",num);
}
}

浙公网安备 33010602011771号