单调dp 石子归并
来源:互联网 发布:二战战斗机性能数据 编辑:程序博客网 时间:2024/06/06 02:41
有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。
n<=3000
普通dp:
- #include <iostream>
- using namespace std;
- #define M 3001
- #define INF 1000000000
- int n,f[M][M],sum[M][M],stone[M];
- int main()
- {
- int i,j,k,t;
- cin>>n;
- for(i=1;i<=n;i++)
- scanf("%d",&stone[i]);
- for(i=1;i<=n;i++)
- {
- f[i][i]=0;
- sum[i][i]=stone[i];
- for(j=i+1;j<=n;j++)
- sum[i][j]=sum[i][j-1]+stone[j];
- }
- for(int len=2;len<=n;len++)//归并的石子长度
- {
- for(i=1;i<=n-len+1;i++)//i为起点,j为终点
- {
- j=i+len-1;
- f[i][j]=INF;
- for(k=i;k<=j-1;k++)
- {
- if(f[i][j]>f[i][k]+f[k+1][j]+sum[i][j])
- f[i][j]=f[i][k]+f[k+1][j]+sum[i][j];
- }
- }
- }
- printf("%d/n",f[1][n]);
- return 0;
- }
由范围可知,用普通的区间型dp会TLE,所以,必须要优化。
单调性。
动态规划也有单调性??
- #include <iostream>
- using namespace std;
- #define M 3001
- #define INF 1000000000
- int n,f[M][M],sum[M][M],stone[M],s[M][M];
- int main()
- {
- int i,j,k,t;
- cin>>n;
- for(i=1;i<=n;i++)
- scanf("%d",&stone[i]);
- for(i=1;i<=n;i++)
- {
- f[i][i]=0;
- s[i][i]=i;
- sum[i][i]=stone[i];
- for(j=i+1;j<=n;j++)
- sum[i][j]=sum[i][j-1]+stone[j];
- }
- for(int len=2;len<=n;len++)//归并的石子长度
- {
- for(i=1;i<=n-len+1;i++)//i为起点,j为终点
- {
- j=i+len-1;
- f[i][j]=INF;
- for(k=s[i][j-1];k<=s[i+1][j];k++)
- {
- if(f[i][j]>f[i][k]+f[k+1][j]+sum[i][j])
- {
- f[i][j]=f[i][k]+f[k+1][j]+sum[i][j];
- s[i][j]=k;
- }
- }
- }
- }
- printf("%d/n",f[1][n]);
- return 0;
- }
0 0
- 单调dp 石子归并
- 石子归并(dp)
- DP 石子归并
- 1021 石子归并 dp
- 石子归并DP
- poj 1738 dp 石子归并
- codevs1048 石子归并(区间DP)
- 51nod 石子归并 (dp)
- 石子归并问题(区间dp)
- 1021 石子归并(区间DP)
- 石子归并 【区间DP】 Codevs1048
- 1021 石子归并 区间dp
- ACM 80. 石子归并(水dp)
- 区间dp++ 基础题,石子归并
- 【区间型DP】石子归并问题
- 51nod 1021石子归并 dp
- 51Nod 1021 石子归并(经典dp)
- 51nod1021石子归并(区间dp)
- hdu2218:Don't be angry
- Java的GC机制
- Mojito是一个JavaScript Web应用框架
- java面试之输入输出流
- 如何当一个好的面试官
- 单调dp 石子归并
- Android客户端基于XMPP的IM(openfire+asmack)的聊天工具之注册(二)
- java中常用到得设计模式有哪几种?
- 浏览器 cookie 详解 -- 转载自网易博客gkecenter
- linux命令之cp:略过目录
- c++的一些小程序!
- spydroid源码分析(一):介绍spydroid每个包的大体功能
- sql行列互转,不是很专业,但也能满足需求。
- hdu_1003_Max Sum hdu_1058_Humble Numbers hdu_1059_Dividing