初学递归搜索,10分求助!(目标30分)
查看原帖
初学递归搜索,10分求助!(目标30分)
348898
Na2_CuCl4楼主2020/11/29 20:26
#include<bits/stdc++.h>
using namespace std;
const int NR=25;
int t[NR],maxx;
int n,m;
int a[111];
int ans=999999;
int cal()
{
    int sum=0;
    for(int i=1;i<=maxx;i++){
    	if(a[i]==0&&a[i+1]==0)return 1e9;
    	if(a[i]==1&&a[i+1]==1)return 1e9;
    	if(a[i]==1){
    		for(int j=0;j<n;j++){
    			if(t[j]==i)sum++;
    		}
    	}
    }
    return sum;	
}

void dfs(int step)
{
	if (step > maxx)
	{
		ans = min(ans, cal());
		return;
	}
	a[step] = 0;
	dfs(step + 1);
	a[step] = 1;
	dfs(step + 1);
}

int main(){
	
	cin>>n>>m;
	if(m==1){
		cout<<0;
		return 0;
	}
	if(m==2){
		for(int i=0;i<n;i++){
			cin>>t[i];
			maxx=max(maxx,t[i]);
		}
		
		dfs(1);
		cout<<ans;
	}
	return 0;
}
2020/11/29 20:26
加载中...