思路可以用回溯,我寫了個90分的轉載一下滿分代碼學習
轉自
http://blog.csdn.net/qq_37614259/article/details/61926721
#include <iostream> using namespace std; int m,n; int a[50]={0},v[50]={0}; int fun(int x,int y) { int sum=0; int i,j; i=-1,j=-1; if(x>=n&&y>0)//不滿足條件 { return -1; } if(x<n&&y>0) { if(v[(x+1)%n]==0)//滿足條件 { v[x]=1;//賦值表示選中 i=fun(x+2,y-1); v[x]=0;//回溯 } j=fun(x+1,y); if(i!=-1&&sum<i+a[x])//判斷求最大值 sum=i+a[x]; if(j!=-1&&sum<j) sum=j; if(i==-1&&j==-1) sum=-1; } return sum; } int main() { cin>>n>>m; for(int i=0;i<n;i++) {cin>>a[i]; } if(m>n/2) cout<<"Error!"<<endl; else cout<<fun(0,m)<<endl; return 0; }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。