1. 程式人生 > >【演算法基礎】DFS湊數

【演算法基礎】DFS湊數

 從給定的陣列arr中選取一個或多個數能否湊出給定的k?

原始碼 

package com.javakk.ex;

import java.util.Scanner;

/**
 * @Time 2018年8月29日 下午5:43:06
 * @Title { 湊數K } 
 * @Desc  { 用給定的一個或多個數能否湊出給定的k }
 * @Email [email protected]
 * @Author JavaKK
 */
public class Ex1 {
    // 給定的陣列
    static int[] a;
    // 數的個數
    static int n;
    // 給定的k值
    static int k;
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        scanner.nextLine();
        a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = scanner.nextInt();
        }
        scanner.nextLine();
        k = scanner.nextInt();
        
        if (dfs(0,0)){
            System.out.println("Yes");
        }else {
            System.out.println("No");
        }
    }

    private static boolean dfs(int i, int sum) {
        if (i == n) 
            return sum == k;
         
        if (dfs(i + 1, sum))
            return true;
        
        if (dfs(i + 1, sum + a[i]))
            return true;
        
        return false;
    }
}

相關推薦

演算法基礎DFS湊數

 從給定的陣列arr中選取一個或多個數能否湊出給定的k? 原始碼  package com.javakk.ex; import java.util.Scanner; /**  * @Ti

演算法基礎字串的全排列演算法

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 這道題是劍指offfer中一道

演算法基礎動態規劃解題例項之野營問題

問題描述: 假設你要去野營。你有一個容量為6磅的揹包,需要決定該攜帶下面的哪些東西。其中每樣東西都有相應的價值,價值越大意味著越重要: 水(重3磅,價值10) 書(重1磅,價值3) 食物(重2磅,價值9) 夾克(重2磅,價值5) 相機(重1磅,價值

演算法基礎動態規劃的理解

本章是個很有趣的問題,也是難倒很多人的問題,同時這又是個會而不難的問題。 動態規劃的核心邏輯是:將問題分解為子問題。在《演算法圖解》這本書裡,深入淺出得講了遞推公式的推演邏輯,但是在關鍵部分,遞推公式部分,並沒給出邏輯。 整個過程好像是,前面一段道路很平緩,走起來很舒適,但是突然

演算法基礎歸併排序的分析

歸併排序也是基本的排序之一,也挺重要的,所以寫這麼一篇部落格總結一下歸併排序的一個特性是,它對N個元素的檔案排序所需要的時間與NlogN成正比,它的缺點是所需需要的空間和N成正比,要克服這個缺點的話,會造成程式碼非常複雜而且開銷巨大。所以如果速度不是主要的問題,而且有足夠的空

演算法基礎----貪心演算法的應用之Huffman編碼

1.Huffman樹的基礎概念 路徑:從樹中的一個節點到另一個節點之間的分支構成這兩個節點的路徑。 路徑長度:路徑上分支的數目。 樹的路徑高度:從根到每一個節點的路徑之和。 節點的帶權路徑長度:從該節點到樹根之間的路徑長度與節點上權的乘積。 樹的帶權路徑長度:樹中所有葉節點

Android基礎利用Intent在Activity之間傳遞數據

一次 there center ack and block for success display 前言: 上一篇文章給大家聊了Intent的使用方法。怎樣用Intent啟動Activity和隱式Intent。這一篇文章給大家聊聊怎樣利用Intent在Activit

js 基礎 作用域和閉包

代碼 var 垃圾回收器 間接 undefined scrip 運行時 例子 解析 一、編譯過程 常見編譯性語言,在程序代碼執行之前會經歷三個步驟,稱為編譯。 步驟一:分詞或者詞法分析 將由字符組成的字符串分解成有意義的代碼塊,這些代碼塊被稱為詞法單元。 例子: v

SSH 基礎淺談Hibernate關系映射(3)

區別 ack 增加 ans 存儲結構 mil pro 映射 方向 繼上篇博客 一對多關聯映射(單向) 上面我們介紹了多對一,我們反過來看一對多不就是多對一嗎?那還用再進行不同的映射嗎?有什麽區別嗎?一對多和多對一映射原理是一致的,存儲是同樣的。也就是生成的數據庫

Java基礎RTTI與反射之Java

start auth try dword star sse from tac sed 1 ; Example assembly language program -- 2 ; Author: Karllen 3 ; Date: revised 05/2014

轉載:Java基礎InputStream 、 InputStreamReader和BufferedReader

gen 結果 取字符 sys try eight string font buffer 來源:http://blog.csdn.net/zgljl2012/article/details/47267609 在Java中,上述三個類經常用於處理數據流,下面介紹一下三個類的

js 基礎 Javascript “繼承”

一份 類繼承 屬性。 淺拷貝 創建 生成 特殊 並不會 也會 【 js 基礎 】Javascript “繼承” 是時候寫一寫 “繼承”了,為什麽加引號,因為當你閱讀完這篇文章,你會知道,說是 繼承 其實是不準確的。 一、類1、傳統的面向類的語言中的類:類/繼承 描述

Linux基礎Linux基礎命令行學習筆記

esc 隱藏 python chm 合並 tree 位置 常用 輸入 絕對路徑:cd /home/python相對路徑:cd Downloads . 表示:當前那路徑..表示:當前路徑的上一層../.. 表示:當前路徑的上二層 沒有...或者以上的 ls: ls 查看當

js 基礎 為什麽 call 比 apply 快?

如果 分享 叠代 [1] get blank 3.4 -a case 這是一個非常有意思的問題。 在看源碼的過程中,總會遇到這樣的寫法: 1 var triggerEvents = function(events, args) { 2 var ev, i

計算機基礎主機名,IP,域名,端口,DNS服務器的通俗理解

net 例如 本地 房子 新的 數字 baidu 域名解析 什麽   在很早的時候,世界上只有幾臺計算機,這幾臺計算機的擁有者想互相連接起來以方便聊天約炮,怎麽辦呢?他們給各自的計算機起了一個名字,比如張三,李四,王二,以後他們就通過這個計算機名字來相互連接。這幾個名字可以

dubbo基礎dubbo學習過程、使用經驗分享及實現原理簡單介紹

multi spring配置 不同 影響 為什麽 exception 同事 sock services 一、前言 部門去年年中開始各種改造,第一步是模塊服務化,這邊初選dubbo試用在一些非重要模塊上,慢慢引入到一些稍微重要的功能上,半年時間,學習過程及線上使用遇到的些問

linux基礎dhcp服務

配置 dhcp 1、修改服務的配置文件:定制功能vi /etc/dhcp/dhcpd.conf option domain-name "linuxxue.top";option domain-name-servers 202.106.0.20;default-lease-time 600;max-le

linux基礎samba匿名共享+用戶認證共享

共享 sabma 一、匿名共享1、安裝yum -y install samba* ##安裝samba軟件2、修改配置文件vi /etc/samba/smb.conf [global] workgroup = MYGROUP server string = Samba

linux基礎 vsftpd+本地用戶認證

本地 vsftpd 用戶 1、修改配置文件[[email protected]/* */ ~]# cat /etc/vsftpd/vsftpd.conf anonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022

linux基礎rpm安裝程序和管理

rpm使用1.了解應用程序應用程序(app):安裝在os上完成特定功能的軟件。應用程序的類型:*.rpm(redhat分支默認軟件格式),*.deb(debian分支默認軟件格式),源代碼(通用的軟件格式,也是生成rpm和deb的基礎),其他自帶安裝程序及免安裝的軟件。用戶程序常用的目錄:/etc,/var/