运行时错误:
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
vector<vector<long long int>> res;
vector<long long int> arr2;
long long int target;
long long int start,last=0;
vector<long long int> temp;
long long int tim=0;
int OK(vector<long long int>a,long long int k,long long int i)//判断是否有重复元素
{
if(i>k)//保证数组存在的时候
for(int t=k;t<i;t++)//循环查找
{
if(a[t]==a[i])
return 0;
}
return 1;
}
void Perm(vector<long long int>a,long long int k,long long int m)//全排列的实现函数
{
if(k==m)//只剩下1个元素
{
tim++;//次数+1
// for(int i=0;i<=m;i++)
// {
// cout<<a[i];
// }
// cout<<"\n";
}
else //还有多个元素待排列
{
for(int i=k;i<=m;i++)//有几个元素就循环几次(因为以它打头,然后对后面的数进行全排列)
{
if(OK(a,k,i))//当不存在重复元素的时候,才进行全排列
{
swap(a[k],a[i]);//进行交换
Perm(a,k+1,m);
swap(a[k],a[i]);
}
}
}
}
int helper(vector<long long int> arr, long long int target, vector<long long int> arr2, long long int index){
if(target==0)
{
res.insert(res.end(),arr2);
}
for(int i=index; i<arr.size();i++){
if(arr[i] <= target){
arr2.insert(arr2.end(),arr[i]);
helper(arr, target-arr[i], arr2, i);
arr2.pop_back();
}
}
}
vector<vector<long long int>> combinationSum(vector<long long int> arr, long long int target){
helper(arr, target, arr2, 0);
return res;
}
int main()
{
vector<long long int> arr; //原始数组
long long int n,m,k,x;
cin >> x >> n >> m >> k;
target = x;
arr.insert(arr.end(),n);
arr.insert(arr.end(),m);
arr.insert(arr.end(),k);
combinationSum(arr,target);
for(int i=0;i<res.size();i++){
for(int j=0;j<res[i].size();j++){
start = 0;
temp.insert(temp.end(), res[i][j]);
}
last = res[i].size()-1;
Perm(temp, start, last);
temp.clear();
}
if(tim){
cout << tim%mod;
}
else{
cout << "impossible";
}
// cout << "组成的数量为:" << tim ;
return 0;
}