zoj 2734 Exchange Cards(DFS~)

给你卡片的种类以及要求的加和值,求出有几种方法的加和能得到那个值。

 

我的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; }  

你可能感兴趣的:(Exchange)