砝碼稱重問題:設有1g、2g、3g、5g、10g、20g的砝碼各若干枚(其質量<=1000g),求出用他們能稱出的質量的種類數(不包括質量為0的情況)。
演算法思路:
1、列舉不同砝碼的個數,計算總重量。並將總重量對應的標誌置為1
2、根據標誌,計算總質量的個數
#include
using
namespace std;
int flag[
1000]=
intmain()
int count=0;
for(
int i=
1;i<=
1000
;i++
)cout
0;
假設輸入2 1 2 1 1 1,就表述 1 1 2 3 3 5 10 20這些砝碼,對於這些砝碼取或者不取就轉換成了0/1問題。
f[i][j] 表示前i件物品中總重量為5的方案是否存在;
狀態轉移方程:
若f[i-1][j] 存在, f[i][j] =1
f[i-1][ j-w[i] ]存在,則f[i][j] =1
初始狀態:f[k][0]=1
終止狀態:f[num][1000](num表示砝碼的總個數
演算法思路:
1、統計砝碼總數,準備砝碼序列
2、初始化動態規劃資料,做動態規劃
3、統計方案總數
#include
using
namespace std;
int f;
for(
int i=
1;i<=
6;i++
)for
(int i=
0;i<=
1000
;i++
) f[i][0
]=1;
for(
int i=
1;i)for
(int j=
1;j<=
1000
;j++)}
int count=0;
for(
int i=
1;i<
1000
;i++)if
(f[num]
[i])
count++;}
cout<<
"total:"
0;
優化#include
using
namespace std;
int f[
1005]=
;for
(int i=
1;i<=
6;i++)f[
0]=1
;for
(int j=
1000
;j>=
1;j--)}
int count=0;
for(
int i=
1;i<
1000
;i++)if
(f[i]
) count++;}
cout<<
"total:"
0;
多重揹包#include
using
namespace std;
int f[
1005]=
;for
(int i=
1;i<=
6;i++)f[
0]=1
;for
(inr i=
1;i<=
6;i+)}
}int count=0;
for(
int i=
1;i<
1000
;i++)if
(f[i]
) count++;}
cout<<
"total:"
0;
砝碼稱重 DP
砝碼稱重 問題描述 設有1g 2g 3g 5g 10g 20g的砝碼各若干枚 其總重 1000 用他們能稱出的重量的種類數。輸入檔案 a1 a2 a3 a4 a5 a6 表示1g砝碼有a1個,2g砝碼有a2個,20g砝碼有a6個,中間有空格 輸出檔案 total n n表示用這些砝碼能稱出的不同重量...
CodeForces 砝碼稱重
1449 砝碼稱重 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 現在有好多種砝碼,他們的重量是 w0,w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。樣例解釋 可以將重物和3放到乙個托盤中,9和1放到另外乙個托盤中。input 單組測試資料。...
1449 砝碼稱重
1449 砝碼稱重 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 現在有好多種砝碼,他們的重量是 w0 w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。樣例解釋 可以將重物和3放到乙個托盤中,9和1放到另外乙個托盤中。in...