洛谷P1441 砝碼稱重

2021-10-04 21:42:43 字數 1325 閱讀 8741

現有n個砝碼,重量分別為 aia_iai​,在去掉 mmm 個砝碼後,問最多能稱量出多少不同的重量(不包括 000)。

請注意,砝碼只能放在其中一邊。

第 111 行為有兩個整數 nnn 和 mmm,用空格分隔。

第 222 行有 nnn 個正整數 a1,a2,a3,…,ana_1, a_2, a_3,\ldots , a_na1​,a2​,a3​,…,an​,表示每個砝碼的重量。

僅包括 111 個整數,為最多能稱量出的重量數量。

輸入 #1

3 1

1 2 2

輸出 #1

3
【樣例說明】

在去掉乙個重量為 222 的砝碼後,能稱量出 1,2,31, 2, 31,2,3 共 333 種重量。

【資料規模】

對於 20%20\%20% 的資料,m=0m=0m=0。

對於 50%50\%50% 的資料,m≤1m\leq 1m≤1。

對於 50%50\%50% 的資料,n≤10n\leq 10n≤10。

對於 100%100\%100% 的資料,n≤20n\leq 20n≤20, m≤4m\leq 4m≤4,m#include#include#include#include#include#includeusing namespace std;

const int maxn = 104;

const int inf = 999999;

int n,m;

int num[maxn]; //num[i]=u; 表示i號砝碼的重量為u。

bool vis[maxn];//vis[i]=true; 表示i號砝碼被刪除了。

bool dp[2005]; //dp[i]=true; 表示可以用已有砝碼表示i重量。

int ans;

void dynamic()

for(int j=maxnum;j>=0;j--)

} maxnum += num[i];

} ans = max(ans,cnt);

}/**

** 找出每一種刪除方法(刪除哪幾個砝碼)。

*/ void dfs(int u,int step)

if(u >= n+1)

dfs(u+1,step); //不刪除這個砝碼

vis[u] = true;

dfs(u+1,step+1); //刪除這個砝碼

vis[u] = false;

}int main()

dfs(1,0);

cout

}

洛谷 P1441 砝碼稱重(深搜 DP)

傳送門 題目描述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 輸入輸出格式 輸入格式 輸入檔案weight.in的第1行為有兩個整數n和m,用空格分隔 第2行有n個正整數a1,a2,a3,an,表示每個砝碼的重量。輸出格式 輸出檔案wei...

洛谷 P1441 砝碼稱重(DFS回溯 DP)

題目大意 已知有n個砝碼,我們從中可以任意去掉m個,問我們最多可以得到多少種不同的重量。解題思路 首先,我們把解題分為兩個思路 首先,我們看任意去掉m個。這個我們可以用dfs模擬,關鍵在於停止條件。我們知道我們每一步都可以選擇新增或者不新增某個砝碼,然後重複n次。這樣我們就有最簡單的遞迴停止條件,遞...

洛谷 P1441 砝碼稱重 子集列舉 bitset

題目描述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 請注意,砝碼只能放在其中一邊。輸入格式 輸入檔案weight.in的第1行為有兩個整數n和m,用空格分隔 第2行有n個正整數a1,a2,a3,an,表示每個砝碼的重量。輸出格式 輸出檔...