bzoj 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)
来源:互联网 发布:sem和seo是什么意思 编辑:程序博客网 时间:2024/04/29 02:10
题目描述
传送门
题解
石子合并应该算是比较经典的问题了。
最裸的DP是
这个算法是
代码
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#define N 500003#define LL long long using namespace std;int a[N],t,n;LL ans;void combine(int k){ int tmp=a[k-1]+a[k]; ans+=tmp; for (int i=k;i<t-1;i++) a[i]=a[i+1]; t--; int j=0; for (j=k-1;j>0&&a[j-1]<tmp;j--) a[j]=a[j-1]; a[j]=tmp; while (j>=2&&a[j]>=a[j-2]) { int d=t-j; combine(j-1); j=t-d; }}int main(){ freopen("a.in","r",stdin); scanf("%d",&n); for (int i=0;i<n;i++) scanf("%d",&a[i]); t=1; for (int i=1;i<n;i++) { a[t++]=a[i]; while (t>=3&&a[t-3]<=a[t-1]) combine(t-2); } while (t>1) combine(t-1); printf("%lld\n",ans);}
决策单调性O(n^2)
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 1003using namespace std;int f[N][N],val[N],n,sum[N],s[N][N];int main(){ freopen("a.in","r",stdin); scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&val[i]); for (int i=1;i<=n;i++) sum[i]=sum[i-1]+val[i]; memset(f,127/3,sizeof(f)); for (int i=1;i<=n;i++) f[i][i]=0,s[i][i]=i; for (int l=2;l<=n;l++) { s[n-l+1][n]=n; for (int i=n-l+1;i>=1;i--) { int j=i+l-1; for (int k=s[i][j-1];k<=s[i+1][j];k++) { int tmp=f[i][k]+f[k+1][j]+sum[j]-sum[i-1]; if (tmp<f[i][j]) f[i][j]=tmp,s[i][j]=k; } } } printf("%d\n",f[1][n]);}
0 0
- BZOJ 3229 [Sdoi2008]石子合并 GarsiaWachs算法
- BZOJ 3229: [Sdoi2008]石子合并 GarsiaWachs算法
- bzoj 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)
- BZOJ-3229 石子合并 GarsiaWachs算法
- bzoj3229 [Sdoi2008]石子合并(非dp的GarsiaWachs算法)
- 【GarsiaWachs算法】bzoj3229: [Sdoi2008]石子合并
- [GarsiaWachs算法] BZOJ 3229 [Sdoi2008]石子合并 & POJ 1738 An old Stone Game & 51Nod 1023 石子归并 V3
- 【BZOJ 3229】 [Sdoi2008]石子合并
- 石子合并(GarsiaWachs算法)
- 石子合并(GarsiaWachs算法)
- HYSBZ-3229 石子合并(GarsiaWachs算法优化)
- 石子合并的GarsiaWachs算法
- poj 1738--石子合并 [GarsiaWachs算法]
- 石子归并(GarsiaWachs算法)
- NYOJ 737 石子合并(一)(区间DP、平行四边形优化、GarsiaWachs算法)
- poj1738 An old Stone Game 石子合并(归并) GarsiaWachs算法
- poj1738 An old Stone Game 石子合并(归并) GarsiaWachs算法
- poj 1738 DP(石子合并的GarsiaWachs算法)
- Git commit message和工作流规范
- linux CentOS 7.2 服务器配置apache+mysql+php环境 (linux 系统下LAMP部署)
- 字符串模式匹配
- Java多线程中interrupt interrupted isInterrupted
- Bungee Jumping 物理题 能量关系
- bzoj 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别
- 简单学生类的继承
- Linux编程之UDP SOCKET全攻略
- 痛定思痛,奋勇前行
- Node.js 模块
- Linux编程之定制带级别的log
- tar命令
- MySQL基础知识三