借助棋盘来解题确实很妙,将本题柱形图放在棋盘上,然后答案就是数量最少的格子,
显然,假设黑格<白格,那么每个黑格必定有一个白格与之对应
感觉自己好迷,这题用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‘; }
原文:https://www.cnblogs.com/zsben991126/p/12133709.html