题目:
分析:
总和为一半的背包问题。
因为范围的是true/false ,应该考虑如何更简单,有一个解就返回。
代码:
我很怀疑,我的代码我的编译器完全没问题,leetcode的就不行。
#include<bits/stdc++.h>
using namespace std;
int A[2000][101];
int f(int s,int n,vector<int> nums)
{//总和为s,该放n及其n以后的数了。
if(n==nums.size()&&s!=0) return 0;
if(A[s][n]!=-1) return A[s][n];
if(s==0) return 1;
if(s<0) return 0;
for(int i=n;i<nums.size();i++)
{
if(f(s-nums[i],i+1,nums))
{
A[s][n]=1;
return 1;
}
}
A[s][n]=0;
return 0;
}
int main()
{
memset(A,-1,sizeof(A));
int all=0;
for(int i=0;i<n.size();i++) all+=n[i];
if(all%2) return false;
cout<<f(all/2,0,n);
}