有若干張郵票,要求從中選取最少的郵票張數湊成乙個給定的總值。 如,有1分,3分,3分,3分,4分五張郵票,要求湊成10分,則使用3張郵票:3分、3分、4分即可。
有多組資料,對於每組資料,首先是要求湊成的郵票總值m,m<100。然後是乙個數n,n〈20,表示有n張郵票。接下來是n個正整數,分別表示這n張郵票的面值,且以公升序排列。
對於每組資料,能夠湊成總值m的最少郵票張數。若無解,輸出0。起初的想法類似於先從小到大排序,然後每次使用面額最大的郵票,類似於count[sum] = count[sum - maxnumber] + 1。 發現ac不過,然後突然想到如果面值是5,8,9。要湊總數13的話,那我肯定錯了。
仔細一想,其實就是動態規劃。
給出錯誤**:
#includeusingnamespace
std;
int assemble(int number, int arr, int
rear)
else
if(number < 0
)
while(arr[rear] >number)
rear--;
return assemble(number - arr[rear + 1], arr, rear) + 1;}
intmain()
intout = assemble(m, arr, n - 1
);
if(out >= 20
)
else
}}
再給出ac**:
#include#include#define mmax 27;
using
namespace
std;
int min(int a,int b)
intmain()}}
if(dp[m]==mmax) cout<<0
}
最小郵票數
時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 1680 解決 558 題目描述 有若干張郵票,要求從中選取最少的郵票張數湊成乙個給定的總值。如,有1分,3分,3分,3分,4分五張郵票,要求湊成10分,則使用3張郵票 3分 3分 4分即可。輸入 有多組資料,對於每組資料,首先是要求湊成的...
最小郵票數
題目描述 有若干張郵票,要求從中選取最少的郵票張數湊成乙個給定的總值。如,有1分,3分,3分,3分,4分五張郵票,要求湊成10分,則使用3張郵票 3分 3分 4分即可。輸入 有多組資料,對於每組資料,首先是要求湊成的郵票總值m,m 100。然後是乙個數n,n 20,表示有n張郵票。接下來是n個正整數...
最小郵票數
有若干張郵票,要求從中選取最少的郵票張數湊成乙個給定的總值。如,有1分,3分,3分,3分,4分五張郵票,要求湊成10分,則使用3張郵票 3分 3分 4分即可。有多組資料,對於每組資料,首先是要求湊成的郵票總值m,m 100。然後是乙個數n,n 20,表示有n張郵票。接下來是n個正整數,分別表示這n張...