普及 NOIP 1999 郵票面值設計

2021-07-24 03:27:49 字數 1068 閱讀 9479

題目描述

給定乙個信封,最多隻允許貼上n張郵票,計算在給定k(n+k≤40)種郵票的情況下(假定所有的郵票數量都足夠),如何設計郵票的面值,能得到最大值max,使在1~max之間的每乙個郵資值都能得到。

例如,n=3,k=2,如果面值分別為1分、4分,則在1分~6分之間的每乙個郵資值都能得到(當然還有8分、9分和12分);如果面值分別為1分、3分,則在1分~7分之間的每乙個郵資值都能得到。可以驗證當n=3,k=2時,7分就是可以得到的連續的郵資最大值,所以max=7,面值分別為1分、3分。

輸入輸出格式

輸入格式:

2個整數,代表n,k。

輸出格式:

2行。第一行若干個數字,表示選擇的面值,從小到大排序。

第二行,輸出「max=s」,s表示最大的面值。

輸入輸出樣例

輸入樣例#1:

3 2輸出樣例#1:

1 3

max=7

【分析】

搜尋+揹包

確定上下界以縮小搜尋範圍

【**】

//noip 郵票面值設計 

#include

#include

#include

#include

#include

#define ll long long

#define m(a) memset(a,0x3f,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

int n,k,mx;

int a[45],ans[45];

int dp[10005];

inline

int dynamic(int now)

inline

void dfs(int num)

if(num>k) return;

fo(i,a[num-1]+1,tmp+1)

a[num]=i,dfs(num+1);

}int main()

NOIP1999郵票面值設計

noip1999郵票面值設計 題目描述 description 給定乙個信封,最多隻允許貼上n張郵票,計算在給定k n k 40 種郵票的情況下 假定所有的郵票數量都足夠 如何設計郵票的面值,能得到最大值max,使在1 max之間的每乙個郵資值都能得到。例如,n 3,k 2,如果面值分別為1分 4分...

NOIP1999 郵票面值設計

時間限制 1 sec 記憶體限制 64 mb 提交 131 解決 63 提交 狀態 我的提交 給定乙個信封,最多隻允許貼上n張郵票,計算在給定k n k 40 種郵票的情況下 假定所有的郵票數量都足夠 如何設計郵票的面值,能得到最大值max,使在1 max之間的每乙個郵資值都能得到。第1行 2個整數...

郵票面值設計(NOIP1999)

傳送門 怎麼講呢?挺有意思的 是一道dp和搜尋的結合。我們把數字從小到大依次列舉。用dp去計算當前的所得最大值。f i 表示湊成i面值所需的最小郵票數量。那麼小於等於n的,都是可以湊出來的。那麼最大值也就好求了。至於dp的上界,用幾個數的和就能解決。如下 include include includ...