dp NOIP2006提高 能量项链
2018-02-26 11:31
204 查看
原题:能量项链
题意:
两个珠子两个数字,第一个为2 3,第二个为3 5,那么我们可以合并这两个珠子,变成2 5,得到2*3*5的能量。
现在给一串珠子(首尾相连成一个环),我们可以任意合并两个珠子,求把这一串珠子合并成一个的时候得到的最大能量。
解析:
这个题因为每次可以任意选择两个珠子合并,所以有n!的可能性,不能暴力,需要用dp来做。
(因为从最后一个开始合并的话需要前面的数,所以要开2*n的数组)
设dp[i][j]为合并i到j的最大能量,具体操作应该和石子合并一样。
代码:
题意:
两个珠子两个数字,第一个为2 3,第二个为3 5,那么我们可以合并这两个珠子,变成2 5,得到2*3*5的能量。
现在给一串珠子(首尾相连成一个环),我们可以任意合并两个珠子,求把这一串珠子合并成一个的时候得到的最大能量。
解析:
这个题因为每次可以任意选择两个珠子合并,所以有n!的可能性,不能暴力,需要用dp来做。
(因为从最后一个开始合并的话需要前面的数,所以要开2*n的数组)
设dp[i][j]为合并i到j的最大能量,具体操作应该和石子合并一样。
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<cstring> #include<algorithm> #include<set> #include<map> #include<list> #include<vector> #include<stack> #include<queue> #include<ctime> #include<cstdlib> #include<sstream> //#include<windows.h> #include<functional> #define D long long #define F double #define MAX 0x7fffffff #define MIN -0x7fffffff #define mmm(a,b) memset(a,b,sizeof(a)) #define pb push_back #define mk make_pair #define fi first #define se second #define pill pair<int, int> #define for1(i,a,b) for(int i=a;i<=b;i++) #define for2(i,a,b) for(int i=a;i>=b;i--) #define ini(n) scanf("%d",&n) #define inll(n) scanf("%lld",&n) #define outisp(n) printf("%d ",n) #define outllsp(n) printf("%lld ",n) #define outiel(n) printf("%d\n",n) #define outllel(n) printf("%lld\n",n) using namespace std; #define N 500100 #define MOD ((int)1e9+7) #define random(a,b) (rand()%(b-a+1)+a) #define stop Sleep(2000) #define CLS system("cls") const string el="\n"; const string elel="\n\n"; const string sp=" "; const string spsp=" "; const string tab="\t"; int pos[207],n; D dp[207][207]; int main(){ ini(n); for1(i,1,n)ini(pos[i]),pos[i+n]=pos[i];//1~2n-1视为珠子本体 for1(l,2,n){ for1(i,1,2*n-l){ for1(k,i,i+l-2){ dp[i][i+l-1]=max(dp[i][i+l-1],dp[i][k]+dp[k+1][i+l-1]+pos[i]*pos[i+l]*pos[k+1]); } } } D ans=0; for1(i,1,n){ ans=max(ans,dp[i][i+n-1]); } cout<<ans<<el; }
相关文章推荐
- NOIP2006提高组-能量项链
- NOIP2006能量项链-dp
- 【动态规划】NOIP2006提高组 能量项链
- NOIP 2006 提高组 t1 能量项链
- noip2006 能量项链 (区间dp)
- NOIP2006提高组 能量项链
- NOIP2006 提高组 复赛 energy 能量项链
- noip2006提高组之能量项链
- Codevs1154 能量项链 ——2006年NOIP全国联赛提高组 区间dp
- NOIP2006能量项链[环形DP]
- NOIP 2006提高组 能量项链
- ACM 116. [NOIP2006] 能量项链(dp矩阵连乘改版+数据2倍化+枚举)
- [NOIP 2006] 能量项链:环形DP
- 能量项链[NOIP2006提高组][Codevs 1154]
- 洛谷 1063 [NOIP2006] 能量项链 DP
- [noip2006]能量项链 区间DP
- 洛谷P1063 能量项链 [2006NOIP提高组]
- nefu269 noip2006能量项链【区间dp 环】
- 区间DP NOIP2006 能量项链
- [NOIP2006] 提高组 洛谷P1063 能量项链