100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > HLG 1376 能量项链

HLG 1376 能量项链

时间:2021-06-26 00:08:41

相关推荐

HLG 1376 能量项链

题意: 给你一个 含有 n 个珠子的项链,规定只有相邻的珠子才能合到一起并得到能量,合到一起的到的新的珠子,可以和其相邻的珠子继续合成,前后次序没有要求,

问你最大能的到多大的能量;

分析 :用 dp[i][j]来表示从 i 到 j 合成得到的最大能量,则状态转移方程为

dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+a[i].left*a[k].right*a[j].right)

通过枚举 I 和 J 的分割点来得到 dp[i][j]的最大值。

View Code

#include<stdio.h>#include<string.h>#define max(a,b)(a)>(b)?a:bstruct node{int left;int right;}a[202];int dp[203][203];int main(){int n,i,j,k,max;//freopen("D:ce.txt","r",stdin);while(scanf("%d",&n)!= EOF){for(i=1;i<=n;i++)scanf("%d",&a[i].left);for(i=1;i<n;i++)a[i].right=a[i+1].left;a[n].right=a[1].left;for(i=n+1;i<=2*n;i++){a[i].left=a[i-n].left;a[i].right=a[i-n].right;}memset(dp,0,sizeof(dp));for(k=1;k<n;k++)for(i=1;i+k<=2*n;i++)for(j=i+1;j<=i+k;j++)dp[i][i+k]=max(dp[i][i+k],dp[i][j-1]+dp[j][i+k]+a[i].left*a[j].left*a[i+k].right);max=0;for(i=1;i<=n;i++)if(dp[i][i+n-1]>max)max=dp[i][i+n-1];printf("%d\n",max);}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。