当前位置: 代码迷 >> 综合 >> zoj - 2734 - Exchange Cards
  详细解决方案

zoj - 2734 - Exchange Cards

热度:34   发布时间:2024-01-10 14:04:46.0

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


  相关解决方案