P5989题解

· · 题解

题目传送门

题目大意

稍微分析一下样例我们可以发现 f_{i,j}=(i-j+1)\times j

所以代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[2005][2005],f[2005][2005]; // f[i][j]表示取到第i,j个点的最少次数 
int main(){
    int n,k;cin>>n>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            cin>>a[i][j];
    dp[1][1]=1;
    for(int i=2;i<=n;i++)  //计算f数组 
        for(int j=1;j<=i;j++)
            f[i][j]=(i-j+1)*j;
    int ans=2020;
    for(int i=1;i<=n;i++) //遍历所有点找到取到该点次数小于等于k的最小值点 
        for(int j=1;j<=i;j++)
            if(f[i][j]<=k)
                ans=min(ans,a[i][j]);
    cout<<ans; 
    return 0;
}