猫(题解)

版权声明:华天才原创 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43891469/article/details/88088063