cf1269D——棋盘解法

借助棋盘来解题确实很妙,将本题柱形图放在棋盘上,然后答案就是数量最少的格子,

显然,假设黑格<白格,那么每个黑格必定有一个白格与之对应

感觉自己好迷,这题用dp想了半天,哎

/*
dp[i][0|1]表示当前填满,留下一格的最优解 
*/
#include<bits/stdc++.h>
using namespace std;
#define N 300005
#define ll long long

ll h[N],n;

int main(){
    cin>>n;
    ll sum=0,s=0;
    for(int i=1;i<=n;i++){
        scanf("%lld",&h[i]);    
        sum+=h[i];
        if(i%2)
            s+=(h[i]+1)/2;
        else
            s+=h[i]/2;
    }
    cout<<min(sum-s,s)<<'\n';
    
}

posted on 2020-01-02 16:30  zsben  阅读(198)  评论(0编辑  收藏  举报

导航