50pts求调
  • 板块P1544 三倍经验
  • 楼主yl2026
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/23 21:01
  • 上次更新2025/7/24 10:48:42
查看原帖
50pts求调
1753377
yl2026楼主2025/7/23 21:01
#include <bits/stdc++.h>

using namespace std;
#define int long long
const int MAXH = 110;
const int INF  = 0x3f3f3f3f;
const int mod = 1e9 + 7;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int n,k,ans = 0;
int a[MAXH][MAXH];
int dp[MAXH][MAXH][MAXH];
signed main(){
	scanf("%lld%lld",&n,&k);
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= i;j++){
            scanf("%lld",&a[i][j]);
        }
    }
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= n;j++)
            for(int l = 0;l <= k;l++)
                dp[i][j][l] = 0;
    dp[1][1][0] = a[1][1];
    dp[1][1][1] = a[1][1] * 3;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= i;j++){
            for(int l = 0;l <= k;l++){
                dp[i+1][j][l] = max(dp[i+1][j][l],dp[i][j][l] + a[i+1][j]);
                dp[i+1][j+1][l] = max(dp[i+1][j+1][l],dp[i][j][l] + a[i+1][j+1]);
                dp[i+1][j][l+1] = max(dp[i+1][j][l+1],dp[i][j][l] + a[i+1][j] * 3);
                dp[i+1][j+1][l+1] = max(dp[i+1][j+1][l+1],dp[i][j][l] + a[i+1][j+1] * 3);
            }
        }
    }
    for(int i = 1;i <= n;i++){
        for(int l = 0;l <= k;l++){
            ans = max(ans,dp[n][i][l]);
        }
    }
    printf("%lld\n",ans);
	return 0;
}
2025/7/23 21:01
加载中...