SDUT 2169 Sequence dp减枝区间划分
来源:互联网 发布:网络推广邀约话术 编辑:程序博客网 时间:2024/04/29 04:34
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">将区间分为m段,使得m段的平方和最小。 </span><br style="box-sizing: border-box; font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);" /><span style="font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">我们定义一个Dp数组Dp[i][j]表示以i结尾,分为j段的最小和,那么对于区间[L+1,i],Dp[i][j] = min(Dp[i][j],Dp[L][j-1]+</span><span class="MathJax_Preview" style="color: rgb(136, 136, 136); box-sizing: border-box; font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);"></span><span class="MathJax" id="MathJax-Element-24-Frame" role="textbox" aria-readonly="true" style="display: inline; font-size: 14px; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; box-sizing: border-box; font-family: 'microsoft yahei'; background-color: rgba(128, 128, 128, 0.0470588);"><nobr style="transition: none; box-sizing: border-box; border: 0px; padding: 0px; margin: 0px; max-width: none; max-height: none; min-width: 0px; min-height: 0px; vertical-align: 0px;"><span class="math" id="MathJax-Span-1" style="transition: none; box-sizing: border-box; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 5.26em;"><span style="transition: none; box-sizing: border-box; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 4.174em; height: 0px; font-size: 17.5px;"><span style="transition: none; box-sizing: border-box; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.089em 1000em 4.06em -0.454em); top: -2.797em; left: 0.003em;"><span class="mrow" id="MathJax-Span-2" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="munderover" id="MathJax-Span-3" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span style="transition: none; box-sizing: border-box; display: inline-block; position: relative; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 2.346em; height: 0px;"><span style="transition: none; box-sizing: border-box; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.889em 1000em 3.203em -0.454em); top: -2.797em; left: 0.631em;"><span class="mo" id="MathJax-Span-4" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0.003em; font-family: MathJax_Size1;">∑</span><span style="transition: none; box-sizing: border-box; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.803em;"></span></span><span style="transition: none; box-sizing: border-box; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.546em 1000em 2.574em -0.454em); top: -1.311em; left: 0.003em;"><span class="texatom" id="MathJax-Span-5" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mrow" id="MathJax-Span-6" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px;"><span class="mi" id="MathJax-Span-7" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12.3725px; font-family: MathJax_Math-italic;">k</span><span class="mo" id="MathJax-Span-8" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12.3725px; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-9" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12.3725px; font-family: MathJax_Math-italic;">L</span><span class="mo" id="MathJax-Span-10" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12.3725px; font-family: MathJax_Main;">+</span><span class="mn" id="MathJax-Span-11" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12.3725px; font-family: MathJax_Main;">1</span></span></span><span style="transition: none; box-sizing: border-box; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.231em;"></span></span><span style="transition: none; box-sizing: border-box; position: absolute; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; clip: rect(1.317em 1000em 2.231em -0.511em); top: -3.026em; left: 1.031em;"><span class="mi" id="MathJax-Span-12" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-size: 12.3725px; font-family: MathJax_Math-italic;">i</span><span style="transition: none; box-sizing: border-box; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.06em;"></span></span></span></span><span class="mi" id="MathJax-Span-13" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px 0px 0px 0.174em; margin: 0px; vertical-align: 0px; font-family: MathJax_Math-italic;">a</span><span class="mo" id="MathJax-Span-14" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">[</span><span class="mi" id="MathJax-Span-15" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Math-italic;">k</span><span class="mo" id="MathJax-Span-16" style="transition: none; box-sizing: border-box; display: inline; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; font-family: MathJax_Main;">]</span></span><span style="transition: none; box-sizing: border-box; display: inline-block; position: static; border: 0px; padding: 0px; margin: 0px; vertical-align: 0px; width: 0px; height: 2.803em;"></span></span></span><span style="transition: none; box-sizing: border-box; display: inline-block; position: static; border-width: 0px 0px 0px 0.004em; border-left-style: solid; border-color: initial; padding: 0px; margin: 0px; vertical-align: -1.425em; overflow: hidden; width: 0px; height: 3.361em; color: rgb(255, 255, 255);"></span></span></nobr></span><span style="font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">)</span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
<span style="font-family: Arial, Helvetica, sans-serif;">#include<bits/stdc++.h></span>
#define LL long long#define INF 0x3f3f3f3fusing namespace std;LL dp[1010][1010];LL sum[1010];int main(){ int T; while(~scanf("%d",&T)) { while(T--) { int n,m; scanf("%d%d",&n,&m); int a; memset(dp,INF,sizeof(dp)); dp[0][0]=0; for(int i=0;i<=m;i++) dp[i][0]=0; for(int i=0;i<=n;i++) dp[0][i]=0; for(int i=1;i<=n;i++) { scanf("%d",&a); sum[i]=sum[i-1]+a; dp[1][i]=sum[i]*sum[i]; /// i个数分成一组 } for(int i=2;i<=m;i++) { ///减枝 ///j<=n-m+i:因为当n个数分成m组时是用不到n个数分成m-1组的情况, /// 最多会用到 小问题n-1个数分成m-1组,同理;所以用n个数算m-1,m-2,m-3,m-4...组都是多余的 for(int j=i;j<=n-m+i;j++) { for(int k=i-1;k<=j-1;k++) { dp[i][j]=min(dp[i][j],dp[i-1][k]+(sum[j]-sum[k])*(sum[j]-sum[k])); } } } printf("%lld\n",dp[m][n]); ///可以写成一维 /// /// for(int i=2;i<=m;i++) ///更快/// { /// /// for(int j=i;j<=n-m+i;j++) /// {/// for(int k=j-1;k>=i-1;k--) ///倒着/// {/// if((sum[j]-sum[k])*(sum[j]-sum[k])>=dp[i][j]) break; ///双重减枝,说明已经找到小的了。
/// dp[i][j]=min(dp[i][j],dp[i-1][k]+(sum[j]-sum[k])*(sum[j]-sum[k]));/// }/// }/// }/// printf("%lld\n",dp[m][n]); } } return 0;}
0 0
- SDUT 2169 Sequence dp减枝区间划分
- SDUT 2169 Sequence dp减枝区间划分
- sdut 2169 Sequence 区间dp
- SDUT-2169-Sequence(DP)
- sdut 1309 区间DP
- 区间DP 整数划分
- 整数划分 区间dp
- 整数划分(区间dp)
- 区间dp(整数划分,石子划分)
- nyoj+区间dp整数划分
- 区间dp----整数划分nyoj746
- 划分dp,区间差最小
- 区间dp—整数划分
- NYOJ746 整数划分(区间DP)
- Sequence【SDUT2169】——区间划分
- poj1141 Brackets Sequence 区间dp
- ZOJ1463:Brackets Sequence(区间DP)
- POJ1141 Brackets Sequence 区间DP
- java反射初级练习
- ssh开发时利用excel表格导入数据
- 解决Android Studio引入SVN上Eclipse依赖工程不能实时更新的思考
- 将tomcat添加为linux系统服务
- Android开发路线(图)
- SDUT 2169 Sequence dp减枝区间划分
- boost::any 学习
- OpenGL编程指南 代码
- Android进阶之获取APK签名信息及MD5指纹
- LG G2救砖攻略
- javascript 句柄 --DOM事件处理及跨浏览器处理
- 大数据开发之走进MapReduce
- Nginx教程(四) Location配置与ReWrite语法
- eclipse(已装插件)导入svn下载的maven项目却没有svn标记