您的位置:首页 > 其它

zoj 2734 Exchange Cards(DFS~)

2010-11-12 19:48 218 查看
给你卡片的种类以及要求的加和值,求出有几种方法的加和能得到那个值。



我的num[i]存的是值为i的卡片的数目。



DFS还是不够熟练,要多练呀!



#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
int sum,ways;
int num[1010];
int value,n;
void DFS(int x)
{
	if( sum == value )
	{
		ways++;
		return ;
	}
	for(int i=x; i<=value; i++)
	{
		if( num[i] && sum + i <= value )
		{
			num[i]--;
			sum += i;
			DFS(i);
			num[i]++;
			sum -= i;
		}
	}
}
int main(void)
{
	int x,y;
	int pe = 0;
	while( cin >> value >> n )
	{
		if( pe )
			cout << endl;
		pe = 1;
		memset(num,0,sizeof(num));
		sum = ways = 0;
		for(int i=0; i<n; i++)
		{
			cin >> x >> y;
			num[x] = y;
		}
		DFS(1);
		cout << ways << endl;
	}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: