題目傳送門
【題目大意】
有$n$種面值的硬幣,第$i$種有$b_i$個,大的硬幣是小的硬幣的倍數,給定乙個金額$k$,求最多可以組成多少份金額不小於$k$的組合。
【思路分析】
首先去掉能自成一組的硬幣,然後考慮幾種硬幣湊成一組,貪心策略就是優先考慮面值大的,細節見**。
【**實現】
1 #include2 #include3 #include4 #include5 #include6**戳這裡#define g() getchar()
7#define rg register
8#define go(i,a,b) for(rg int i=a;i<=b;i++)
9#define back(i,a,b) for(rg int i=a;i>=b;i--)
10#define db double
11#define ll long long
12#define il inline
13#define pf printf
14#define mem(a,b) memset(a,b,sizeof(a))
15using
namespace
std;
16ll fr()
23while(ch>='
0'&&ch<='
9') w=(w<<1)+(w<<3)+ch-'
0',ch=g();
24return w*q;25}
26const
int n=22;27
ll n,c,ans,use[n];
28struct
moneycoin[n];
31bool
tag;
32bool
cmp(money a,money b)
35int
main()
46while(1
)//如果組成一組了就退出57}
58}59if(t>0)64}
65}66if(tag) break;67
}68}69
if(!tag) break;//
無法湊成一組的情況
70 rg ll as=1e9+7
;71 go(i,1,n) if(use[i]) as=min(as,coin[i].b/use[i]);
72//
考慮到有幾種硬幣湊成一組的情況所以要取最小值
73 ans+=as
;74 go(i,1,n) coin[i].b-=use[i]*as;75
}76 pf("
%lld\n
",ans);
77return0;
78 }
poj3040 貪心好題
題目大意 農場主給乙個小弟發工資,每週至少需要發c元,現在fj有一堆硬幣,這些硬幣面值的最大公約數相同即它們成倍數關係。問fj最多能給多少個星期的工資?這道題開始兩次都想錯了,後來看了別人的思路,感覺和裝箱問題有點類似。1 先排除掉大於等於c的面值,這些面值可以單獨發乙個星期 2 從剩下的面值中從大...
POJ3040給奶牛發工資
題意 有n種硬幣,每種硬幣有mi個,然後讓你給奶牛發工資,每週發至少c元 就是不找零錢的意思 然後問你能發幾周?硬幣之間都是倍數關係 思路 這個題目做了兩天,丟臉,看完這個題目我的第一反應就是從大的發起,就是先花面值大的,能大的就一直大的,只要不超過c,然後再能小的就一直小的,補全沒超過但是又不夠那...
POJ 刷題順序
poj從簡到難 按照ac數目排序 的列表如下,作為小弱的刷題順序。大牛們可以看後面倒排的hard表,還有四道題沒人拿到first blood.屬性依次為 id,title,ratio,ac,submit hard模式 4027 flights 0.0 0 39 4029 huzita axiom 6...