版权声明:华天才原创 https://blog.csdn.net/weixin_43891469/article/details/88088063
题目描述
有人饲养了n只猫。
猫[i]和猫[j]的友好指数为f[i,j],
猫的幸福指数是指与距离1以内的猫的友好指数的总和。
此人按照从猫[1]到猫[n]的顺序把猫配置与二维上。
(猫[i]的坐标为x[i],x[i]是满足x[1]小于x[2]……小于x[n]的实数)
求猫的幸福指数总和的最大值。
luogu — AT689
标程
#include<bits/stdc++.h>
#define maxn 1001
using namespace std;
int a[maxn][maxn],dp[maxn][maxn],n,cnt;
int main(){
scanf("%d",&n);
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<n;++i){
for(int j=1;j<=i;++j){
if(dp[i-1][j]>=dp[i-1][j-1]){
dp[i-1][j]=dp[i-1][j];
}
else{
dp[i-1][j]=dp[i-1][j-1];
}
}
cnt=0;
for(int j=i;j>=0;--j){
cnt+=a[i][j];
dp[i][j]=dp[i-1][j]+cnt;
}
}
for(int j=1;j<=n;++j){
if(dp[n-1][j]>=dp[n-1][j-1]){
dp[n-1][j]=dp[n-1][j];
}
else{
dp[n-1][j]=dp[n-1][j-1];
}
}
dp[n-1][n]*=2;
printf("%d\n",dp[n-1][n]);
return 0;
}