zoj - 2734 - Exchange Cards
题目简单,但是要注意格式,本人提交5次,前4次均PE
#include <iostream> using namespace std; const int maxn = 10 + 10; int n, m, cnt; typedef struct datatype //定义数据类型 { int val; int num; }data; data a[maxn]; //要输入的数组 void dfs(int cur_sum, int last) //深度优先遍历 { int i; if(cur_sum == n) //当目前的和==目标和时 { cnt++; } else for(i = last; i < m; i++) //当目前的和!=目标和时 { if(cur_sum + a[i].val <= n && a[i].num > 0) //判断如果取了后加起来的和有没有大过目标和及该数是否还存在 { a[i].num--; dfs(cur_sum + a[i].val, i); a[i].num++; //注意把标记改回来 } } } int main() { int s[10], k = 0; //用来存每组数据的结果,格式上的需要 while(cin>>n>>m) { int i; for(i = 0; i < m; i++) cin>>a[i].val>>a[i].num; cnt = 0; dfs(0, 0); s[k++] = cnt; } for(int i = 0; i < k-1; i++) cout<<s[i]<<endl<<endl; cout<<s[k-1]<<endl; return 0; }