首页 > 代码库 > Sicily 1345:能量项链(dp)
Sicily 1345:能量项链(dp)
#include <bits/stdc++.h> using namespace std; int main(){ int n; while(cin >> n){ int arr[n]; for(int i = 0; i < n; i++)cin >> arr[i]; int dp[n][n+1]; //使用dp[i][j]代表从第i个数字往后合并j位的最大能量 memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; i++){ dp[i][2] = arr[i]*arr[(i+1)%n]*arr[(i+2)%n]; } //dp[i][0] = dp[i][1] = 0, dp[i][2]为连续三数字相乘 for(int j = 3; j <= n; j++){ for(int i = 0; i < n; i++){ int ans = 0; for(int k = 1; k < j; k++){ ans = max(ans, dp[i][k]+dp[(i+k)%n][j-k]+arr[i]*arr[(i+k)%n]*arr[(i+j)%n]); } // 状态转移 dp[i][j] = ans; } } int ans = 0; for(int i = 0; i < n; i++){ ans = max(ans, dp[i][n]); // 遍历得出最大值 } cout << ans << endl; } }
Sicily 1345:能量项链(dp)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。