洛谷P1021 郵票面值設計

2022-05-16 01:14:08 字數 687 閱讀 3516

一道奇怪的題目,考場不一定能想得出來

首先證明1的必要性,顯然,沒有1無法表示出1,因此1是必要的

有了1之後,就有了乙個列舉範圍,對於一種郵票,它的面值要比前乙個大。

設前i-1種郵票能表示出來的最大範圍為up,那麼一定不能表示出up+1,所以第i種郵票的最大面值為up+1

複雜度未知,不過這種小資料的題只要想出解法通常就能過了

#include#include#includeusing namespace std;

#define go(i,a,b) for(int i=a;i<=b;++i)

#define com(i,a,b) for(int i=a;i>=b;--i)

#define mem(a,b) memset(a,b,sizeof(a))

const int inf=0x3f3f3f3f;

int max=0,ans[20],tmp[20],f[100000+10],m,tot;

int calc(int n,int up)

go(i,1,up)

return up;

}void dfs(int now,int last,int up)

return;

} int x;

go(i,last+1,up+1)

}int main()

洛谷 P1021 郵票面值設計

要求乙個組合,很明顯是用dfs來搜尋,那麼怎麼判斷呢?用揹包!dp i 表示拼湊出 i 這個數的最小郵票數,然後統計dp i n 的個數即可 但是經過幾次嘗試就會發現,其上界值一定 當前最大的連續值,因為再大,就會出現 當前最大連續值 1 的空缺。上 include using namespace ...

p1021 郵票面值設計

題目連線 正常的搜尋是不容易搜尋到答案的,因為無法確定最大的內個max值。但是我們可以這樣考慮,首先搜尋的範圍是遞增的。這個範圍的下界是上乙個數 1,上界的確定,考慮揹包問題。d i 代表拼成i最少的數是多少個。因此搜尋到答案後,我們對d i 進行計算就可以得到最大能拼成的值。include inc...

P1021 郵票面值設計

給定乙個信封,最多隻允許貼上n張郵票,計算在給定k n k 15 種郵票的情況下 假定所有的郵票數量都足夠 如何設計郵票的面值,能得到最大值max,使在1 max之間的每乙個郵資值都能得到。例如,n 3,k 2,如果面值分別為1分 4分,則在1分 6分之間的每乙個郵資值都能得到 當然還有8分 9分和...