rnqoj-49-加分二叉树-(区域动归+记忆化)
2013-09-26 14:38
99 查看
区域动归的问题
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; int n; int a[51]; int vis[51][51]; int num[51][51]; int dll(int l,int r) { int i; if(num[l][r]!=-1)return num[l][r]; if(l>r) { return 1; } if(l==r) { num[l][r]=a[l]; vis[l][r]=l; return a[l]; } int as=0; for(i=l;i<=r;i++) { int t=0; t=dll(l,i-1)*dll(i+1,r)+a[i]; if(as<t) { vis[l][r]=i; as=t; } } num[l][r]=as; return as; } int leap; void dos(int l,int r) { if(vis[l][r]==-1)return ; if(leap==0) { printf("%d",vis[l][r]); } else { printf(" %d",vis[l][r]); } leap++; if(l<r) { dos(l,vis[l][r]-1); dos(vis[l][r]+1,r); } } int main() { int i; while(~scanf("%d",&n)) { memset(num,-1,sizeof(num)); memset(vis,-1,sizeof(vis)); for(i=1;i<=n;i++)scanf("%d",&a[i]); if(dll(1,n)); cout<<num[1] <<endl; leap=0; dos(1,n); cout<<endl; } }
相关文章推荐
- rnqoj-49-加分二叉树-(区域动归+记忆化)
- RQNOJ 49 加分二叉树 (树形DP)
- luoguP1040 区间DP(记忆化 加分二叉树
- 洛谷 P1040 加分二叉树
- 【洛谷】P1040 加分二叉树
- VijosP1100:加分二叉树
- NOIP2003提高组 加分二叉树
- [树形DP]加分二叉树
- 加分二叉树 树形DP
- vijos1100:加分二叉树
- 加分二叉树
- 加分二叉树
- 1090 加分二叉树
- 加分二叉树[NOIP 2003提高组][Codevs 1090]
- P1040 加分二叉树(区间DP)
- 【原题】【noip 2003 T2】【动态规划】加分二叉树
- [区间DP]【NOIP2003T3】加分二叉树 题解
- 洛谷 P1040 [NOIP2003 T3] 加分二叉树
- 加分二叉树
- 洛谷P1040 加分二叉树