我在一次培训中遇到了这个问题。我们有N
个不同的值(N<= 100
)。我们把这个数组称为A[N]
,对于这个数组A,我们确定其中有一个1,而且A[i]
≤ 109。其次,我们给出了数字S
,其中S
≤ 109。
现在我们需要使用这些值来解决经典的硬币问题。实际上,我们需要找到最少的元素数,使它们的总和恰好为S
。可以无限次使用A
中的每个元素。
时间限制:1秒
内存限制:256 MB
示例:
S = 1000, N = 10
A[] = {1,12,123,4,5,678,7,8,9,10}. The result is 10.
1000 = 678 + 123 + 123 + 12 + 12 + 12 + 12 + 12 + 12 + 4
我尝试过什么
我尝试使用经典的动态规划硬币问题技术来解决这个问题,但它使用了太多内存并且超过了内存限制。
我无法弄清楚我们应该保留哪些值。提前感谢您的帮助。
这里是几个无法使用经典dp硬币问题解决的测试案例。
S = 1000000000 N = 100
1 373241370 973754081 826685384 491500595 765099032 823328348 462385937
251930295 819055757 641895809 106173894 898709067 513260292 548326059
741996520 959257789 328409680 411542100 329874568 352458265 609729300
389721366 313699758 383922849 104342783 224127933 99215674 37629322
230018005 33875545 767937253 763298440 781853694 420819727 794366283
178777428 881069368 595934934 321543015 27436140 280556657 851680043
318369090 364177373 431592761 487380596 428235724 134037293 372264778
267891476 218390453 550035096 220099490 71718497 860530411 175542466
548997466 884701071 774620807 118472853 432325205 795739616 266609698
242622150 433332316 150791955 691702017 803277687 323953978 521256141
174108096 412366100 813501388 642963957 415051728 740653706 68239387
982329783 619220557 861659596 303476058 85512863 72420422 645130771
228736228 367259743 400311288 105258339 628254036 495010223 40223395
110232856 856929227 25543992 957121494 359385967 533951841 449476607
134830774
OUTPUT FOR THIS TEST CASE: 5
S = 999865497 N = 7
1 267062069 637323855 219276511 404376890 528753603 199747292
OUTPUT FOR THIS TEST CASE: 1129042
S = 1000000000 N = 40
1 12 123 4 5 678 7 8 9 10 400 25 23 1000 67 98 33 46 79 896 11 112 1223 412
532 6781 17 18 19 170 1400 925 723 11000 607 983 313 486 739 896
OUTPUT FOR THIS TEST CASE: 90910
int
和Integer
之间切换。也许你应该写一个详细的解释? - templatetypedef