zoj - 2734 - Exchange Cards

来源:互联网 发布:淘宝网秋冬婴儿服装 编辑:程序博客网 时间:2024/06/05 00:46

题目简单,但是要注意格式,本人提交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;}