poj3040 貪心好題

2021-08-14 23:03:40 字數 935 閱讀 1613

題目大意:農場主給乙個小弟發工資,每週至少需要發c元,現在fj有一堆硬幣,這些硬幣面值的最大公約數相同即它們成倍數關係。問fj最多能給多少個星期的工資?

這道題開始兩次都想錯了,後來看了別人的思路,感覺和裝箱問題有點類似。

1、先排除掉大於等於c的面值,這些面值可以單獨發乙個星期;

2、從剩下的面值中從大到小挑選出最大不大於c的面值組合,然後從小到大填補空缺,允許超出一點。(這裡有點類似裝箱先挑能裝的下的最大的箱子,剩餘的空位用小箱子填滿,不同的是這裡允許超出,接下來將會給出稍微嚴謹一點的證明)

證明:假如開始不從最大的開始選,則會浪費一部分面值較小的(如3元1張  6元5張 9元10張,c為20,如果開始先選小的去接近c,到後來只剩下面值大的,它們組合起來超出面值c的部分更大,而這個問題貪心的總策略可以歸納為:每次挑選硬幣的時候,盡量讓它們組合起來的面值盡量接近c 

如果先選小的,後面就很難保證它們組合起來接近c

**:

#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

using namespace std;

long long n,c;

long long need[50],val,num,cnt;

struct coin

};bool cmp(coin a,coin b)

coin.push_back(coin(val,num));

} sort(coin.begin(),coin.end(),cmp);

while(1)

}for(int i=0;i0&&coin[i].num)

}if(res>0) break;///不能湊足c

long long max_week=inf;

for(int i=0;i

POJ3040給奶牛發工資

題意 有n種硬幣,每種硬幣有mi個,然後讓你給奶牛發工資,每週發至少c元 就是不找零錢的意思 然後問你能發幾周?硬幣之間都是倍數關係 思路 這個題目做了兩天,丟臉,看完這個題目我的第一反應就是從大的發起,就是先花面值大的,能大的就一直大的,只要不超過c,然後再能小的就一直小的,補全沒超過但是又不夠那...

poj1017 貪心 思維 好題

題意 運輸公司有6種規格的物品各若干件 1 1 2 2,3 3 4 4,5 5,6 6的,這六種物品都要放在6 6的箱子裡運輸,讓你求出最少用多少個箱子。解題思路 有兩種方法來做,第一種特別繁瑣,也是最直接的解決方式,那就是根據常識來貪心並模擬,量很大,另一種和這個貪心乙個思路,實現的時候非常簡便,...

貪心 好題 Yogurt factory

題目 任務規定,乙個酸奶製造廠,在n個星期內,分別要向外提供y i unit的酸奶。已知這個製造廠第i周製造每unit酸奶的費用為c i 儲存室儲存每1unit酸奶1星期的費用為s。問要完成這個任務的最小費用是多少。來自 思路 等價的思路,在第n天的時候,第n 2天製造的酸奶可以看成第n 1天製造的...