DP練習 砝碼稱重

2021-10-03 14:23:38 字數 977 閱讀 7739

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 單組測試資料。...