zoukankan      html  css  js  c++  java
  • [LOJ3216] Wina

    Description

    给定 (n le 2000) 行总共 (frac {n(n+1)} 2) 个数字堆叠成了一个数塔,从上往下数第 (i) 行里恰好有 (i) 个数。给定 (k),你需要恰好从中拿走 (k) 个数字,使得拿走的数字的最小值最小。一个数可以被拿走当且仅当它的左上角和右上角没有数字。

    Solution

    显然我们只需要瞄准一个目标数字即可,问题在于计算出要想删除这个数字必须要删除的数字个数有多少。

    手玩一下发现结论是,当我们删除第 (i) 行第 (j) 列的数字时,必须要删除的数字的总个数是 (j(i-j+1)),因为必须要被删除的图形斜着看刚好是一个矩形。

    于是扫一遍即可。

    #include <bits/stdc++.h>
    using namespace std;
    
    
    #define int long long 
    const int N  = 2005;
    
    int a[N][N],ans=1e9,n,k;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin>>n>>k;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                cin>>a[i][j];
                if(j*(i-j+1)<=k)
                {
                    ans=min(ans,a[i][j]);
                }
            }
        }
        cout<<ans<<endl;
    }
    
    
  • 相关阅读:
    鼠标单击事件( onclick )
    什么是事件《js》
    作业
    javaben的设计规则
    cookie的相关方法
    cookie 基本用法
    include 指令与动作区别
    简单的购物车应用案例 相关代码4
    简单的购物车应用案例 相关代码3
    iOS UI 布局
  • 原文地址:https://www.cnblogs.com/mollnn/p/13747871.html
Copyright © 2011-2022 走看看