zoukankan      html  css  js  c++  java
  • 能量项链(NOIP2006)

    第一次做的时候方程是对的,但就是没有AC
    f[l][r]=max{f[l][k]+f[k][r]+a[l]*a[k]*a[r]|l<k<r}

    r=l+i,f[l][r]表示从l到r共r-l+1=i+1颗珠子聚合后可以获得的最大能量

    翻了两篇题解发现,问题出在把环拆成链时没有把链再存一遍

    还有就是在循环的时候第一个循环,i不是1n,而是2n+1因为打断的是中间的

    方程变形:区间dp公式:f[i][j]=max{f[i][k]+f[k+1][j]+决策}

    之前我套公式套傻了写成f[l][k]+f[k+1][r]+a[l]*a[k]*a[r]

    *事实上k并不用+1,因为题意是说相邻两个珠子合并,k是第一个珠子的尾标记和第二个珠子的头标记,他们是同一个数字

    AC代码:

    #include<iostream>
    using namespace std;
    int n,ans,f[210][210],a[210];
    int main()
    {
    	cin>>n;
    	for(int i=1; i<=n; i++)
    	{
    		cin>>a[i];
    		a[n+i]=a[i];
    	}
    	for(int i=2; i<=n+1; i++)//注意i的循环头尾
    	{
    		for(int l=1; l+i-1<=2*n;l++)//注意链是到2n
    		{
    			int r=l+i-1;
    			for(int k=l+1;k<=r-1;k++)//k位于lr之间
    			{
    				f[l][r]=max(f[l][r],f[l][k]+f[k][r]+a[l]*a[k]*a[r]);//套公式
    				ans=max(ans,f[l][r]);
    			}
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    poj 2186 && hdu 3836
    poj 2833 The Average
    hud 3062 Party
    论 ACM 与泡妞 (转载)
    poj 1064 Cable master
    poj Candies
    [转]人才流失的背后
    获取存储过程的ReturnValue值
    javascript js jquery获取元素位置代码总结
    【引用】xmlpath 操作 xml
  • 原文地址:https://www.cnblogs.com/fox-nest/p/12217009.html
Copyright © 2011-2022 走看看