現有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輸出 #11 2 2
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 } 傳送門 題目描述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 輸入輸出格式 輸入格式 輸入檔案weight.in的第1行為有兩個整數n和m,用空格分隔 第2行有n個正整數a1,a2,a3,an,表示每個砝碼的重量。輸出格式 輸出檔案wei... 題目大意 已知有n個砝碼,我們從中可以任意去掉m個,問我們最多可以得到多少種不同的重量。解題思路 首先,我們把解題分為兩個思路 首先,我們看任意去掉m個。這個我們可以用dfs模擬,關鍵在於停止條件。我們知道我們每一步都可以選擇新增或者不新增某個砝碼,然後重複n次。這樣我們就有最簡單的遞迴停止條件,遞... 題目描述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 請注意,砝碼只能放在其中一邊。輸入格式 輸入檔案weight.in的第1行為有兩個整數n和m,用空格分隔 第2行有n個正整數a1,a2,a3,an,表示每個砝碼的重量。輸出格式 輸出檔...洛谷 P1441 砝碼稱重(深搜 DP)
洛谷 P1441 砝碼稱重(DFS回溯 DP)
洛谷 P1441 砝碼稱重 子集列舉 bitset