C++动态规划解决NOI发题问题:最大高兴指数之和
"问题可以转化为求一个序列的最大高兴指数之和。假设题册的开心值数组为H,长度为n。\n我们可以使用一维动态规划来解决这个问题。\n首先,定义一个一维数组dp,dp[i]表示以第i个同学结尾的最大高兴指数之和。\n那么dp[i]的计算方式如下:\ndp[i] = max(dp[j] + H[i] * H[j]),其中j<i。\n即以第i个同学结尾的最大高兴指数之和等于前面所有同学的最大高兴指数之和加上第i个同学和前面所有同学的高兴指数之和的最大值。\n最后,我们只需要找到dp数组中的最大值即可,它就是整个序列的最大高兴指数之和。\n\n以下是C++代码实现:\n\ncpp\n#include <iostream>\n#include <vector>\nusing namespace std;\\nint main() {\n int n; \n cin >> n; \n vector<int> H(n); \n for (int i = 0; i < n; i++) {\n cin >> H[i]; \n } \n \n vector<int> dp(n); \n dp[0] = 0; \n for (int i = 1; i < n; i++) {\n for (int j = 0; j < i; j++) {\n dp[i] = max(dp[i], dp[j] + H[i] * H[j]); \n } \n } \n \n int maxHappy = 0; \n for (int i = 0; i < n; i++) {\n maxHappy = max(maxHappy, dp[i]); \n } \n \n cout << maxHappy << endl; \n \n return 0; \n}\n\n\n这样,我们就可以通过动态规划求解出最大的高兴指数之和。\n"
原文地址: https://www.cveoy.top/t/topic/p6pE 著作权归作者所有。请勿转载和采集!