盾神與砝碼稱重 DFS

2021-10-02 18:39:13 字數 1332 閱讀 4114

問題 1548: [藍橋杯][演算法提高vip]盾神與砝碼稱重

時間限制: 1sec 記憶體限制: 128mb 提交: 504 解決: 183

題目描述

有一天,他在宿舍裡無意中發現了乙個天平!這  個天平很奇怪,有n個完好的砝碼,但是沒有遊碼。盾神為他的發現興奮不已!於是他準備去稱一稱自己的東西。他準備好了m種物品去稱。神奇的是,盾神一早就  知道這m種物品的重量,他現在是想看看這個天平能不能稱出這些物品出來。但是盾神稍微想了1秒鐘以後就覺得這個問題太無聊了,於是就丟給了你。

資料規模和約定

1< =n< =24,  1< =m< =10.

輸入第一行為兩個數,n和m。 

第二行為n個數,表示這n個砝碼的重量。 

第三行為m個數,表示這m個物品的重量。 

輸出輸出m行,對於第i行,如果第i個物品能被稱出,輸出yes否則輸出no。 

樣例輸入

4  2 

1 2 4 8

15 16

樣例輸出

yes

no

思路:

假設在左邊放物品,右邊放砝碼,那麼左邊==右邊重量時才能稱出來。

那麼我們也可以選砝碼放到左邊。這一點是關鍵。

那麼對於每乙個砝碼有三個狀態:不放、放左邊、放右邊。

**:

#include#include#define rep(i,a,b) for(int i=a;i<=b;i++)

#define dep(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

#include#include#include#includeusing namespace std;

const int maxn=20+6;

#define mod 1000000007

#define inf 0x3f3f3f3f

int dx= ;

int dy= ;

int n,m;

int a[maxn];//西交

bool vis[maxn];

int ans;

void dfs(int now,int sum,int x)

if(now>n)

return;

dfs(now+1,sum+a[now],x);//放砝碼那邊

dfs(now+1,sum,x);

dfs(now+1,sum-a[now],x);//放物品那邊

return ;

}int main()

rep(i,1,m)

return 0;

}

盾神與砝碼稱重

有一天,他在宿舍裡無意中發現了乙個天平!這 個天平很奇怪,有n個完好的砝碼,但是沒有遊碼。盾神為他的發現興奮不已!於是他準備去稱一稱自己的東西。他準備好了m種物品去稱。神奇的是,盾神一早就 知道這m種物品的重量,他現在是想看看這個天平能不能稱出這些物品出來。但是盾神稍微想了1秒鐘以後就覺得這個問題太...

演算法提高 盾神與砝碼稱重

演算法提高 盾神與砝碼稱重 時間限制 1.0s 記憶體限制 256.0mb 提交此題 問題描述 有一天,他在宿舍裡無意中發現了乙個天平!這個天平很奇怪,有n個完好的砝碼,但是沒有遊碼。盾神為他的發現興奮不已!於是他準備去稱一稱自己的東西。他準備好了m種物品去稱。神奇的是,盾神一早就知道這m種物品的重...

演算法提高 盾神與砝碼稱重

問題描述 有一天,他在宿舍裡無意中發現了乙個天平!這個天平很奇怪,有n個完好的砝碼,但是沒有遊碼。盾神為他的發現興奮不已!於是他準備去稱一稱自己的東西。他準備好了m種物品去稱。神奇的是,盾神一早就知道這m種物品的重量,他現在是想看看這個天平能不能稱出這些物品出來。但是盾神稍微想了1秒鐘以後就覺得這個...