[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
题目描述:
现有几袋糖果,老师要将糖果分给小张和小王两个同学,每一袋都有一定数量的糖果,每袋糖果只能全部分给他们其中一人,要求最终两人分得糖果的数量相同。
输入:糖果的袋数和各袋中糖果的数量;
输出:平分下来的糖果数量,以及两个人分别分到的各袋中糖果的数量,如果无法平分,则直接输出-1
示例1:
1.输入:
5
2 6 5 4 7
输出:
12
2 4 6
5 7
2.输入:
4
1 2 3 5
输出:
-1
#解题想法:再背包问题的基础上,增加一个记录当前节点的满足条件的list m=5 l=[2,6,5,4,7] su=sum(l) if su%2==1:
print(-1) else: t=int(su/2) dp=[[False]*(t+1) for _ in range(0,len(l))]
print(dp) dp[0][l[0]]=True for i in range(0,len(l)): dp[i][0]=True dp2 = [[""]
* (t + 1) for _ in range(0, len(l))] print(dp2) dp2[0][l[0]] = str(l[0]) for i
in range(1,len(l)): for j in range(1,t+1): if j>l[i]:
dp[i][j]=dp[i-1][j]|dp[i-1][j-l[i]] if dp[i-1][j]: dp2[i][j]=dp2[i-1][j] if
dp[i-1][j-l[i]]: dp2[i][j] =dp2[i-1][j-l[i]]+str(l[i]) else:
dp[i][j]=dp[i-1][j] dp2[i][j] = dp2[i - 1][j] print(dp) if dp[-1][-1]:
tmp=list(map(int,list(dp2[-1][-1]))) tmp2=list(set(l)-set(tmp)) tmp.sort()
tmp2.sort() for i in tmp: print(i,end=" ") print() for i in tmp2: print(i,end="
") else: print(-1)