DP地獄訓練 砝碼秤重

2022-03-25 21:52:54 字數 991 閱讀 5332

時間限制: 1 sec  記憶體限制: 64 mb

提交: 610  解決: 270

[提交][狀態][討論版]

設有n種砝碼,第k種砝碼有ck個,每個重量均為wk,求:用這些砝碼能秤出的不同重量的個數,但不包括乙個砝碼也不用的情況。

輸入的第一行只有乙個數n,表示不同的砝碼的種類數.

第2行至第n+1行,每行有兩個整數.第k+1行的兩個數分別表示第k種砝碼的個數和重量.

輸出中只有一行資料:total=n。表示用這些砝碼能秤出的不同重量數。

2 

2 22 3

total=8
對於100%的資料,砝碼的種類n滿足:1≤n≤100;

對於30%的資料,砝碼的總數量c滿足:1≤c≤20;

對於100%的資料,砝碼的總數量c滿足:1≤c≤100;

對於所有的資料,砝碼的總重量w滿足:1≤w≤400000;

多重揹包,把每一種重量的砝碼二進位制分割,然後設計dp方程表示某種重量是否能秤出。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

8using

namespace

std;910

int n, f[500000

], c, w, ans;

1112 vectorpack;

1314

intmain()

23if(c)pack.push_back(c *w);24}

25for(int i = 0 ; i < pack.size() ; i ++)29}

30for(int i = 1 ; i <= 450000 ; i ++)

33 printf("

total=%d\n

", ans);

34 }

view code

DP地獄訓練 石子歸併

時間限制 1 sec 記憶體限制 64 mb 提交 694 解決 295 提交 狀態 討論版 有一堆石頭質量分別為w1,w2,wn.wi 10000 將石頭合併為兩堆,使兩堆質量的差最小。輸入第一行只有乙個整數n 1 n 50 表示有n堆石子。接下去的n行,為每堆石子質量。輸出只有一行,該行只有乙個...

DP地獄訓練 石子合併

時間限制 1 sec 記憶體限制 64 mb 提交 1004 解決 204 提交 狀態 討論版 有n堆石子圍成乙個圓圈。現在需要把它們合併成一堆石子。每次合併時,只能合併相鄰的兩堆石子,所耗力氣為兩堆石子重量之和,合併得到的新堆的重量為原兩堆重量之和。問最少需要耗費多少力氣?資料規模 1 n 200...

洛谷 1441 砝碼秤重

題意概述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 題解 先dfs決定用哪些砝碼,然後dp求可以稱出的重量有多少種 1 include2 include3 include4 using namespace std 5const int ...