zoukankan      html  css  js  c++  java
  • NP完全问题 计蒜客2020蓝桥杯省赛A组模拟赛

    思路:因为只是一道填空题,本题可以直接用暴力求解,也可以用dfs求解,这里只介绍dfs的思路。首先,30个元素,每个元素对应着选和不选两种情况。那么,在dfs一开始,我们先不选,一直递归到最后一个元素时再开始选。因为假如我们一开始便选了前面的元素,可能会导致我们还没看后面的元素,递归就结束了,显然这不是我们所期望的。同时应注意一点,因为这里我们定义的是全局变量,所以即使在选择的过程中,累加的和已经等于了我们所期望得到的值,此时最好也不要结束递归,而是等到我们递归到最后一个元素后,再结束递归。避免因为忘记回溯而出现问题。
    代码如下

    #include <stdio.h>
    long long a[30]={70368744177669, 105553116266503, 123145302310920, 61572651155460, 30786325577730, 15393162788865, 78065325572101, 109401406963719, 125069447659528, 62534723829764, 31267361914882, 15633680957441, 78185584656389, 109461536505863, 125099512430600, 62549756215300, 31274878107650, 15637439053825, 78187463704581, 109462476029959, 125099982192648, 62549991096324, 31274995548162, 15637497774081, 78187493064709, 109462490710023, 125099989532680, 62549994766340, 31274997383170, 15637498691585},b[30],sum,f,ans=1019842928705602;
    void dfs(int i,long long s)
    {
    	if(s==ans&&i==30)
    	{
    		f=1;
    		for(int j=0;j<30;j++)
    			printf("%lld",b[j]);
    		return ;
    	}
    	if(s>ans||f||i>=30)	return ;
    	b[i]=0;
    	dfs(i+1,s);
    	b[i]=1;
    	dfs(i+1,s+a[i]);
    }
    int main()
    {
    	dfs(0,0);
    	return 0;
    }
    
  • 相关阅读:
    师生关系
    2019-2020 20191316《信息安全专业导论》第二周学习总结
    计算机科学概论问题2
    android studio device file explorer 无法向/storage/emulated/0/上传文件
    【转载】android打包APK
    android app no modules 错误,不能运行
    Error:Unable to locate adb within SDK in Android Studio
    Ubuntu set up 8
    Ubuntu 18.04.3 安装 CUDA 10.2
    Intel Realsense SDK for Android 编译
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14848000.html
Copyright © 2011-2022 走看看