NC210249. 打砖块(brike)
描述
输入描述
数据的第一行为两个正整数,分别表示 ,接下来的第i每行有 个数据,分别表示。
输出描述
第1行:表示被敲掉砖块的最大值总和
示例1
输入:
4 5 2 2 3 4 8 2 7 2 3 49
输出:
19
C++(clang++ 11.0.1) 解法, 执行用时: 54ms, 内存消耗: 20320K, 提交时间: 2022-08-12 15:26:03
#include<bits/stdc++.h> #define ll long long using namespace std; ll n,m,a[52][52],sum[52][52],f[52][52][6000]; int main() { scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) scanf("%lld",&a[i][j]); for(int j=1;j<=n;j++) for(int i=1;i<=n;i++) sum[i][j]=sum[i-1][j]+a[i][j]; for(int j=1;j<=n;j++) for(int i=0;i<=n;i++) for(int k=i;k<=m;k++) for(int l=0;l<=i+1;l++) f[i][j][k]=max(f[i][j][k],f[l][j-1][k-i]+sum[i][j]); cout<<max(f[0][n][m],f[1][n][m]); return 0; }