题解 | #删除相邻数字的最大分数#
删除相邻数字的最大分数
https://www.nowcoder.com/practice/3bcf72c738b6494bbe1ebe0ffde56152
#include <iostream> #include <vector> using namespace std; int main() { //动态规划:dp[i]表示选择加上i或者加上i-1的最大值 //动态转移方程:dp[i] = (dp[i-1],dp[i-2]+nums[i]) //初始化:dp[0] = nums[0],dp[1] = max(nums[0],nums[1]) //填表顺序:从左往右 //返回值:dp[n-1] int N = 1e4 + 10;//1e4表示10的4次方 vector<int> dp(N,0); vector<int> nums(N,0);//nums[i]表示i出现的总和 int n = 0; cin >> n; int x = 0; for(int i = 0; i < n; ++i)//输入值 { cin >> x; nums[x] += x; } dp[0] = nums[0],dp[1] = max(nums[0],nums[1]); for(int i = 2; i < N; ++i) { dp[i] = max(dp[i-1],dp[i-2]+nums[i]); } cout << dp[N-1] << endl; return 0; }