zzulioj1873: This offer 深搜

題目鏈接

題目大意:

給出n個數,在這n個數兩兩之間加上加號或減號將其合併爲一個數,求最終不同的結果的個數

代碼如下:

#include <bits/stdc++.h>
using namespace std;
int n, a[22], s[5000], ans;
void dfs( int x, int t){
    if ( x == n){
        if ( !s[t + 2000]){
            s[t + 2000] = 1;
            ans++;
        }
        return;
    }
    dfs( x + 1, t + a[x]);
    dfs( x + 1, t);
}
int main()
{
    while ( ~scanf( "%d", &n)){
        memset( s, 0, sizeof( s));
        for ( int i = 0; i < n; i++){
            scanf( "%d", &a[i]);
        }
        ans = 0;
        dfs( 1, a[0]);
        printf( "%d\n", ans);
    }
    return 0;
}

使用狀態數組s保存最終和
發佈了40 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章