列舉兩個縱座標i、j,接著表示列舉區域的上下邊界,
設對於每個橫座標區域的字首和和為\(s_l\),列舉k,
顯然當\(s_k>s_l\)時,以(i,k)為左上角,(j,k)為右下角的矩陣一定合法。
k從小到大,維護乙個單調佇列,
顯然當\(l1時
如果\(s_,l2一定對答案沒有貢獻,就不將其加入單調佇列。
對於乙個k,在單調佇列中二分,列舉出乙個最小的位置,並且\(s_k>s_l\)。
#include #include #include #include #include #include #include const int n=305;
using namespace std;
long long sum[n][n],num[n];
int d[n],tot,n,m;
int ans;
inline int read(long long &n)
inline long long sum1(int x,int y,int x1,int y1)
int main()
ans=0;
int l=1,r=tot,mid;
for(i=1;i<=n;i++)
for(j=n;j>=i && (j-i+1)*m>ans;j--)
if(num[l]
}if(p
}} printf("%d",ans);
}
NOIP2016提高組模擬 積木
比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...
計數 NOIP2016提高A組模擬7 15
樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...
NOIP2016提高A組模擬9 2 單峰
問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...