这道题算是最简单的区间dp了。。非常久之前写的,搞懂原理了就1A。

传送门:

problem_id=1181">http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1181

状态方程定义:

dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]);

然后利用三层for就好了。

for(int len=2;len<=n;len++){
for(int s=1;s<=n-len+1;s++){
int e=s+len-1;
f[s][e]=inf;
for(int k=s;k<=e-1;k++){
if(f[s][e]>f[s][k]+f[k+1][e]+sum[s][e])
f[s][e]=f[s][k]+f[k+1][e]+sum[s][e];
}
}
}

最重要的是这个循环,可是事实上也挺简单,首先枚举区间长度,齐次枚举起点s,当然这里每次都要对f[s][e]都初始化为正无穷(视题目情况而定),由于这里每一次的s与e都是不同样的。

然后第三层枚举的是k,k相当于跳板的作用,然后在里面进行dp就好了。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 111
#define inf 99999999
int f[maxn][maxn],sum[maxn][maxn],spone[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&spone[i]);
for(int i=1;i<=n;i++){
sum[i][i]=spone[i];
for(int j=i+1;j<=n;j++){
sum[i][j]=sum[i][j-1]+spone[j];
}
}
int min1=inf;
for(int len=2;len<=n;len++){
for(int s=1;s<=n-len+1;s++){
int e=s+len-1;
f[s][e]=inf;
for(int k=s;k<=e-1;k++){
if(f[s][e]>f[s][k]+f[k+1][e]+sum[s][e])
f[s][e]=f[s][k]+f[k+1][e]+sum[s][e];
}
}
}
if(min1>f[1][n]) min1=f[1][n];
for(int i=1;i<n;i++){
swap(spone[i],spone[i+1]);
for(int l=1;l<=n;l++){
sum[l][l]=spone[l];
for(int q=l+1;q<=n;q++){
sum[l][q]=sum[l][q-1]+spone[q];
}
}
for(int len=2;len<=n;len++){
for(int s=1;s<=n-len+1;s++){
int e=s+len-1;
f[s][e]=inf;
for(int k=s;k<=e-1;k++){
if(f[s][e]>f[s][k]+f[k+1][e]+sum[s][e])
f[s][e]=f[s][k]+f[k+1][e]+sum[s][e];
}
}
}
if(min1>f[1][n]) min1=f[1][n];
swap(spone[i],spone[i+1]);
}
printf("%d\n",min1);
}
/*
3
2 5 1
*/

最新文章

  1. C# 之httpwatch 缩减HttpWatch成可以进行二次开发的代码
  2. cocos2dx 动画显示异常
  3. 亲测 asp.net 调用 webservice返回json
  4. N个数随机相加得出固定值的排列组合
  5. leetcode先刷_Climbing Stairs
  6. Java深入研究【1、object类】
  7. 如何简单的实现新手引导之UGUI篇
  8. 【Unity游戏开发】浅谈Unity游戏开发中的单元测试
  9. c#实例化继承类,必须对被继承类的程序集做引用
  10. luogu 3166 组合与gcd(数三角形)结论
  11. VBA中查找并选定文字
  12. 函数调用的方法一共有 4 种,call,apply,bind
  13. spring boot(十四)shiro登录认证与权限管理
  14. linux日志管理
  15. CSS 点击图片替换样式
  16. c# Winform间的页面传值
  17. 解如何利用 XML 和 JavaScript Object Notation 在 Ajax 客户端和 Java 服务器之间传输数据(代码)(Oracle)。
  18. Leetcode:Two Sum分析和实现
  19. Thymeleaf 使用时的标签
  20. MySQL 的约束

热门文章

  1. js 数组 : 差集、并集、交集、去重
  2. Spring IoC简介及使用
  3. .NET开源项目一览
  4. iOS 开发仿网易云音乐歌词海报
  5. lucene构建restful风格的简单搜索引擎服务
  6. WebRTC代码走读(八):代码文件夹结构
  7. node--19 moogose demo1
  8. 那些年尝试过的效率工具之Total Commander
  9. xBIM 基础05 3D墙案例
  10. cookie、sessionStorage和localStorage