合并石子
2015-06-06 14:11
225 查看
代码是参考ACdreamers敲的。
相邻石子合并,找最小代价。
相邻石子合并,找最小代价。
#include <cstdio> #include <algorithm> using namespace std; int a[110]; int dp[110][110]; int sum[110]; int n; int getmin() { for(int i=0;i<=n;i++) dp[i][i]=0; for(int v=1;v<n;v++)//v所代表的是当合并间隔为v的时候,遍历全部石子,找俩俩石子合并需要的最小代价。v的范围是[0,n-1] { for(int i=0;i<n-v;i++)//找[i,j]这个区间内的最小代价,当然,i的范围是[0,n-v-1]; { int j=i+v; dp[i][j]=0xffffff; int temp=sum[j]-(i>0 ? sum[i-1] : 0);//求[i,j]区间内的所有石子的和。sum[j]-sum[i]. for(int k=i;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+temp);这 就是递推式的含义了 } } return dp[0][n-1]; } int main() { scanf ("%d",&n); for(int i=0;i<n;i++) scanf ("%d",&a[i]); sum[0]=a[0]; for(int i=1;i<=n;i++) { sum[i]=sum[i-1]+a[i]; //printf("%d %d\n",sum[i],i); } printf("%d\n",getmin()); return 0; }
相关文章推荐
- dict
- LeetCode2 AddTowNumbers
- 【构造】UVa 11387 The 3-Regular Graph
- JsRender实用入门教程
- poj 2540 Hotter Colder(极角计算半平面交)
- docker rmi all
- 【NOIP提高组2005】谁拿了最多奖学金
- ef6 使用 mysql
- Gradle project sync failed. Please fix your project and try
- win8.1安装出错解决方法之一
- 秒表功能实现
- CMake的使用
- Cygwin+vim+cscope+ctags+taglist打造个性IDE开发环境
- centOS7关闭防火墙的命令
- directory identifiers (dirids)
- 创建最大堆
- WINCE 6.0 编辑框自动弹出软键盘
- GET请求的中文乱码处理
- MyBatis拦截器实现分页
- 替换空格