問題描述
oxx 和 xjj 決定和小夥伴們一同坐船前往 xiamen。去 xiamen 的船票一張 p 元。
當他們滿懷興致地來到港口時發現居然只有不設找零的自動售票機,只能使用一元,五元,十元,二十元,五十元,一百元的紙幣,且一次至多買 k 張船票。因此他們不得不去銀行取錢。而 oxx 是個大懶人,他希望取的紙幣數量越少越好,因此他想知道他們一行 n 人要都買到票至少需要取多少張紙幣。
input
第一行三個整數 n,k,p (1≤n≤103,1≤k≤10,1≤p≤103) 分別表示 oxx 需要購買船票張數,一次至多買船票數量,單張船票**。
output
輸出乙個整數,表示 oxx 至少要取多少張紙幣。
題意即為:取錢n*p元,而一次至多取k張,問怎麼取,使總共取的紙幣張數最少
1 #include 2 #include 3#define inf 10e8
4#define c 1001
5const
int m[6]=;
6int min(int a,int b)
7int
main()
8,item[11]=;
10 scanf("
%d%d%d
",&n,&k,&p);
11for(int i=1;i<=k;i++)
1219}20
for(int i=n;i>=1;i--)dp[i]=inf;
21for(int i=1;i<=k;i++)
22for(int j=i;j<=n;j++)
23 dp[j]=min(dp[j-i]+item[i],dp[j]);
2425 printf("
%d\n
",dp[n]);
2627
return0;
28 }
首先求出買1-k張票需要多少張紙幣,存入item陣列中,
其中,下標i表示買i張票,item[i],表示買一張票所需的張數,dp陣列的下標i表示一共買i張票,dp[i]表示買i張票需要的最小紙幣數
這樣就轉化成了完全揹包問題:
有k種物品,每種物品都有無限個可取,每種物品i的價值是item[i],容量是i,要求恰好放入乙個容量為n的揹包中,價值最小是多少?
因為要求價值最小,所以一開始便將dp陣列每個元素初始化為inf。
狀態轉移方程就可以解釋為:買j張票所需要的最小紙幣張數,是「買[j-i]張票所需要的最小紙幣張數加買i張票所需要的最小紙幣張數」,與「買j張票所需要的最小紙幣張數」這兩者中的最小值。
21,22行的迴圈順序以及一維陣列的應用是乙個空間優化,具體含義並不明確,只是套了個模板,有待學習。
python坑爹的黑店 1023 坑爹的黑店
題目描述 今天小明去了乙個風景如畫的地方散心,但是自己帶的飲料喝完了,小明口渴難耐,見不遠處有家小商店,於是跑去買飲料。小明 我要買飲料!店主 我們這裡有三種飲料,礦泉水1.5元一瓶,可樂2元一瓶,橙汁3.5元一瓶。小明 好的,給我一瓶礦泉水。說完他掏出一張n元的大鈔遞給店主。小明 小明環顧四周,就...
坑爹的if語句
前兩天的時候,自己在修改 的時候,自己感覺對除錯比較有心得體會了。但遇到乙個問題,總在乙個函式中返回了false,明明條件就是不應該返回。修改前的示例 如下 string topic topic is not empty if topic.empty return false 我想對這行 加乙個日誌...
坑爹的javascript快取
開發圖書管理專案,結果使用jqury的ajax函式老是出狀況,要麼返回值為null,要麼根本就沒有呼叫servlet方法,甚至有時候連引數都沒有傳遞過去。除錯了快乙個小時,時好時壞的,簡直頭都要大了。後來用firefox的檢視原始碼才發現js 居然和ide中的不一致!我靠,明明已經禁止了瀏覽器快取,...