dfs练习

来源:互联网 发布:org.apache.axis 编辑:程序博客网 时间:2024/06/01 10:11
//序列A中n个数选k个数使得和为x,最大平方和是maxsumsqu#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>using namespace std;const int maxn=30;vector<int> ans,temp;int maxsumsqu=0;int a[maxn];int k,x,n;void dfs(int index,int nowk,int sum,int sumsqu){if(nowk==k&&sum==x){if(sumsqu>maxsumsqu){maxsumsqu=sumsqu;ans=temp;}return;}if(nowk>k||sum>x||index==n){return;}temp.push_back(a[index]);dfs(index+1,nowk+1,sum+a[index],sumsqu+a[index]*a[index]);temp.pop_back();dfs(index+1,nowk,sum,sumsqu);}int main(){scanf("%d%d%d",&n,&k,&x);for(int i=0;i<n;i++){scanf("%d",&a[i]);}dfs(0,0,0,0);printf("%d",maxsumsqu);for(int i=0;i<ans.size();i++){printf(" %d",ans[i]);}system("pause");return 0;}

0 0