0.總結
get to the key point firstly, the article comes from lawsonabs!
1.題意
給出質量分別為1-n
的砝碼各乙個,求出由這n個砝碼可稱出的重量數。舉例如下。
如果有3個砝碼,即其重量分別是1,2,3
,那麼就可以稱出6中不同的重量。分別是1,2,3,4,5,6
。
1 2 3
2.分析
2.1採用dp
陣列f[i]=1
表示重量i可稱達,否則表示不能稱到重量i。
兩重迴圈就可以計算出所有的可達重量i。
(其實如果不給這個演算法冠上dp的帽子,可能大家就覺得不是那麼難懂了。)稍微想一想,就知道這麼做是符合邏輯而且是可以求出答案的。
2.2 演算法步驟
3.**
#include
using namespace std;
const
int maxn =20;
const
int maxw =
1000
;//限制最大可稱重量
int n,m;
//從n個數中選擇m個
int arr[maxn]
;int
main()
int f[maxw]
;fill
(f,f+maxw,0)
; f[0]
=1;//dp獲取可稱重的個數
for(
int i =
1; i <= n;i++)}
}int cnt =0;
for(
int i =
1;i<= maxw;i++)}
cout << cnt <<
"\n"
;}
砝碼稱重 DP
砝碼稱重 問題描述 設有1g 2g 3g 5g 10g 20g的砝碼各若干枚 其總重 1000 用他們能稱出的重量的種類數。輸入檔案 a1 a2 a3 a4 a5 a6 表示1g砝碼有a1個,2g砝碼有a2個,20g砝碼有a6個,中間有空格 輸出檔案 total n n表示用這些砝碼能稱出的不同重量...
P1441 砝碼稱重 搜尋 dp
你會發現 對於這種很像揹包的dp。不打滾動陣列很有可能錯,因為很多時候可能會忘記保留以前狀態的答案,體現在f i j max f i 1 j f i j 上,因為f i j 可能被f i b i 更新,所以要取max,若想不取max,則必須保證這個狀態只會被更新一次 這題刷錶比填表更好寫,刷表你的初...
CodeForces 砝碼稱重
1449 砝碼稱重 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 現在有好多種砝碼,他們的重量是 w0,w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。樣例解釋 可以將重物和3放到乙個托盤中,9和1放到另外乙個托盤中。input 單組測試資料。...