Wet Shark and Two Subsequences
阿新 • • 發佈:2018-12-09
ai+bi = R ai-bi = S 2ai = R+S 2bi = R-S
然後就是DP,如果用二維陣列的話,注意計算的方向,防止覆蓋dp陣列的值
def twoSubsequences(x, r, s): if r<s or (r+s)%2: return 0 mod=10**9+7 sa,sb=(r+s)//2,(r-s)//2 maxL=sb//min(x) maxV=sa dp=[[0 for _ in range(maxV+1)] for _ in range(maxL+1)] dp[0][0]=1 for j in x: for l in range(maxL,0,-1): # 1, maxL+1 for i in range(maxV,-1,-1): if i>=j: dp[l][i]+=dp[l-1][i-j] dp[l][i]%=mod res=0 for l in range(1, maxL+1): res+=dp[l][sa]*dp[l][sb] res%=mod return res if __name__ == '__main__': mrs = input().split() m = int(mrs[0]) r = int(mrs[1]) s = int(mrs[2]) x = list(map(int, input().rstrip().split())) result = twoSubsequences(x, r, s) print(result) #print(twoSubsequences([1,1,1,2], 3, 1)) #print(twoSubsequences([1,1,1,4], 3, 5)) #print(twoSubsequences([1,1,1,4], 5, 3))