nyoj737石子合并
来源:互联网 发布:python爬虫下音乐 编辑:程序博客网 时间:2024/06/05 20:50
#include<stdio.h>#include<string.h>int min(int a,int b){return a>b?b:a;}int dp[203][203],sum[203]; int main(){int n;while(~scanf("%d",&n)){ int s[203]; int i,j,start,end,mid; sum[0]=0; for(i=1;i<=n;i++) {scanf("%d",&s[i]); sum[i]=sum[i-1]+s[i]; dp[i][i]=0;}for(int count=2;count<=n;count++)//外层循环控制个数 for(start=1;start<=n-count+1;start++)//内层循环控制石子堆移动 { end=start+count-1; dp[start][end]=0x3f3f3f3f; for(mid=start;mid<end;mid++) dp[start][end]=min(dp[start][end],dp[start][mid]+dp[mid+1][end]+sum[end]-sum[start-1]);//dp[start][mid]+dp[mid+1][end]是子堆消耗的代价 }//+sum[end]-sum[start-1]是本次移动消耗的代价<pre name="code" class="cpp">printf("%d\n",dp[1][n]);}return 0; }
石子合并是一道关于区间DP的题目,如果能够通过数学原理推出DP方程式的话这道题就不难写出来了 ,通过题意可以看出石子合并就是两个两个的石子堆进行合并需要花费的代价,每次两个相邻的堆进行合并,就需要进行多次循环来控制石子合并的对象和合并的个数;当石子合并时还需要把之前消耗的代价加上。
0 0
- NYOJ737-石子合并
- nyoj737 石子合并 详细
- nyoj737石子合并
- nyoj737 石子合并
- nyoj737石子合并
- NYOJ737石子合并(一)
- nyoj737石子合并【区间dp】
- NYOJ737石子合并(一)
- nyoj737 石子合并 区间dp
- 区间DP-NYOJ737石子合并
- 石子合并 nyoj737 区间dp
- 石子合并 nyoj737 四边形优化
- nyoj737 石子合并(一)
- NYoj737 石子合并(区间dp)
- NYOJ737石子合并&NKOJ 圆形操场
- NYOJ737——石子合并(1)
- nyoj737石子合并(一)【区间dp】
- nyoj737 石子合并(一) 区间DP
- 2012蓝桥杯预赛试题本科c++比酒量
- 如何修改Ruby的gem源(gem sources)
- 编写DLL所学所思(2)——导出类
- POJ-2993-Emag eht htiw Em Pleh
- 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题),假定在16位机器上
- nyoj737石子合并
- 机器学习技法作业三题目13-15
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade(贪心+模拟,t次进位之后的数是什么)
- LeetCode : Remove Duplicates from Sorted Array
- EventBus使用详解(一)——初步使用EventBus
- 在controller和视图之间传递参数
- 22岁一张白纸
- EventBus使用详解(二)——EventBus使用进阶
- python实用小知识