赞
踩
- sum=1
- n=1
- cnt=1
- while sum<=20230610:
- n+=1
- cnt+=n
- sum+=cnt
- print(n-1)
两个集合的权值差最小的时候,两个集合的权值乘积最大,利用背包去划分两组集合,从而得到权值最大的情况。(参考佬的ac代码)lanqiao2159490285
- s="5160 9191 6410 4657 7492 1531 8854 1253 4520 9231 1266 4801 3484 4323 5070 1789 2744 5959 9426 4433 4404 5291 2470 8533 7608 2935 8922 5273 8364 8819 7374 8077 5336 8495 5602 6553 3548 5267 9150 3309"
- lst=[]
- for i in s.split(" "):
- lst.append(int(i))
- #print(lst)
- bag=sum(lst)//2
- dp=[[0]*(bag+1) for i in range(41)]
- for i in range(1,41):
- cur=lst[i-1]
- for j in range(1,bag+1):
- if j-cur>=0:
- dp[i][j]=max(dp[i-1][j-cur]+cur,dp[i-1][j])
-
- a=max(dp[40])
- b=sum(lst)-a
- print(a*b)
pypy3能过90%样例,有一个运行超时
- def cnt(x):
- for i in x:
- if x.count(i)%2!=0:
- return False
- else:
- return True
- s = input()
- lst = []
- if len(s)%2 != 0:
- print("NO")
- else:
- if cnt(s):
- print("YES")
- else:
- print("NO")
看了破烂小狗的解法,用了异或
任意两个相同的数异或的值为0,偶数个相同的数异或的值也是0;遍历一遍如果结果为0那么所有的字符偶数,否则则是奇数(实在是优雅)
- ans = 0
- s = input()
- for i in s:
- ans ^= ord(i)
- print("NO" if ans else "YES")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。