藍橋杯 算法提高 種樹


思路可以用回溯,我寫了個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;  
}  



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com