标签:i++ for 输入 scan max 今天 das ber span
求贤若渴,虚心前行。
今天为大家整理一道动态规划的经典题目——书的抄写,是一道经典的二维线性dp问题,一起看一下吧。
9 3
1 2 3 4 5 6 7 8 9
1 5
6 7
8 9
题解代码:
#include<iostream>
#include<cstring>
using
namespace
std;
int
m,k,a[505],dp[505][505],sum[505],path[505][505];
void
print(
int
i,
int
j){
if
(i==0)
return
;
print(i-1,path[i][j]);
printf
(
"%d %d\n"
,path[i][j]+1,j);
}
int
main(){
scanf
(
"%d%d"
,&m,&k);
for
(
int
i=1;i<=m;i++){
scanf
(
"%d"
,&a[i]);
sum[i]=sum[i-1]+a[i];
}
memset
(dp,0x3f,
sizeof
(dp));
for
(
int
i=1;i<=m-k+1;i++){
dp[1][i]=sum[i];
}
for
(
int
i=2;i<=k;i++){
for
(
int
j=i;j<=m-k+i;j++){
for
(
int
k=i-1;k<j;k++){
if
(max(dp[i-1][k],sum[j]-sum[k])<dp[i][j]){
dp[i][j]=max(dp[i-1][k],sum[j]-sum[k]);
path[i][j]=k;
}
}
}
}
print(k,m);
// printf("%d\n",dp[k][m]);
return
0;
}
标签:i++ for 输入 scan max 今天 das ber span
原文地址:https://www.cnblogs.com/cxs070998/p/11370021.html