Source: P1060 [NOIP2006 普及组] 开心的金明 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
状态转移方程
题解
# n=money,m=num
n, m=map(eval, input().split())
# dp[num][money]
dp=[[0 for i in range(n + 1)] for j in range(m + 1)]
for i in range(1,m+1):
v,p=map(eval,input().split())
for j in range(1, n + 1):
dp[i][j]=(dp[i-1][j] if j<v else max(dp[i-1][j],dp[i-1][j-v]+v*p))
print(dp[m][n])