51NOD 1021 石子归并
来源:互联网 发布:温暖的一句话知乎 编辑:程序博客网 时间:2024/06/06 01:11
题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1021
题解:
区间dp。
区间dp的样子大致都差不多。
模版:
for(int i=1;i<=n;i++) dp[i][i]=0; // 初始化 for(int len=2;len<=n;len++) // 枚举区间的长度 { for(int i=1;i+len<=n+1;i++) { // 区间的头结点 int j=i+len-1; // 区间的尾结点 dp[i][j]=inf; for(int k=i;k<=j;k++) { // 查询区间 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]); } } }
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3fconst int maxn = 1e2+10;int dp[maxn][maxn];int num[maxn];int sum[maxn];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&num[i]); met(sum,0); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+num[i]; for(int i=1;i<=n;i++) dp[i][i]=0; for(int len=2;len<=n;len++) // 枚举区间的长度 { for(int i=1;i+len<=n+1;i++) { // 区间的头结点 int j=i+len-1; // 区间的尾结点 dp[i][j]=inf; for(int k=i;k<=j;k++) { // 查询区间 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]); } } } printf("%d\n",dp[1][n]);}
0 0
- 51nod 1021 石子归并
- 51nod 1021 石子归并
- 51Nod 1021 石子归并
- 51nod 1021 石子归并
- 51NOD 1021 石子归并
- 51nod 1021 石子归并
- 51 Nod 1021 石子归并
- 51nod 1021 石子归并
- 1021 石子归并-51Nod
- 【51nod】1021 石子归并
- 51nod 1021 石子归并
- 51Nod 1021 石子归并
- 51nod 石子归并
- 51nod 1021石子归并 dp
- 51Nod 1021 石子归并v1
- 51Nod 1021 石子归并(经典dp)
- 51nod 1021 石子归并 dp
- 51Nod-1021-石子归并
- Ubuntu16.04.1如何安装eclipse neon
- Java:一个简单的死锁示例
- CSU 1868 潜在好友
- 深入理解C++中public、protected及private用法
- Linux curl命令详解
- 51NOD 1021 石子归并
- 建maven工程时直接使用jdk 1.7
- 面向对象—基本数据和引用数据参数传递的过程
- 使用php 解析 apk版本号(版本,权限,信息)thinkphp
- c语言实现AVL树
- MyBatis3.3.0文档学习总结(二)
- php怎么将数据做成json的格式给前端使用?
- LeetCode 15
- 微信公众平台 45047 验证说明