【习题 8-10 UVA

【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

证明:前i个数一定能凑够1..sum[i]中的所有数字 i=1时显然成立。 现在假设i>=2时结论成立 即前i个数字能凑出1..sum[i] 令k=i+1; 现在证明前i+1个数字能凑出1..sum[i+1] 即用前i个数字和数字a[i+1]凑出1..sum[i+1] 现在我们把i+1个数字全都用上。 得到sum[i+1] 现在我们**要再得到sum[i]+1,sum[i]+2..sum[i+1]-1** 那么我们只要用sum[i+1]减去p就好 设delta = sum[i+1]-sum[i] 则p∈[1..delta-1] 而显然p是小于等于i的;(因为sum[i+1]-sum[i]-1<=i) 而sum[i]>=i 则说明前i个数字一定能凑够所有的p即凑够1..delta-1 那么我们把**凑出来的数字从这i+1个数字里面删掉**。 剩下的就是**所需求的新凑出来的数字了** 则**sum[i]+1,sum[i]+2..sum[i+1]-1**这些数字都能用前i+1个数字凑出来。 则前i+1个数字能够凑够1..sum[i]中的所有数字。

知道这个结论之后。从后往前贪心凑就可以了。
(sum[n]为奇数显然无解
(选择sum[n]/2为负数就好

【代码】

在这里输入代码
原文地址:https://www.cnblogs.com/AWCXV/p/8259095.html