BZOJ 1177 Oil 特技列舉

2022-05-26 23:39:10 字數 1508 閱讀 4403

對於三個正方形的位置一共有六種情況。

預處理出(i,j)左上角,左下角,右上角,右下角區域內最大權值的正方形。

列舉分界線更新答案。

剛開始想了乙個錯誤的dp也是蠢啊。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 100000000000000ll

#define pa pair#define ll long long

#define n 2505

#define fp(a,b,c) for(int a=b;a<=c;a++)

#define fd(a,b,c) for(int a=c;a>=b;a--)

using

namespace

std;

intn,m,k,ans;

inta[n][n],b[n][n],c[n][n],d[n][n],s[n][n];

intmain()

fd(i,k,n)fd(j,k,m)s[i][j]-=s[i-k][j]+s[i][j-k]-s[i-k][j-k];

fp(i,k,n)fp(j,k,m)a[i][j]=max(s[i][j],max(a[i-1][j],a[i][j-1

]));

fp(i,k,n)fd(j,k,m)b[i][j]=max(s[i][j],max(b[i-1][j],b[i][j+1

]));

fd(i,k,n)fp(j,k,m)c[i][j]=max(s[i][j],max(c[i+1][j],c[i][j-1

]));

fd(i,k,n)fd(j,k,m)d[i][j]=max(s[i][j],max(d[i+1][j],d[i][j+1

]));

fp(i,k,n-k)fp(j,k,m-k)ans=max(ans,a[i][j]+b[i][j+k]+c[i+k][m]);

fp(i,k,n-k)fp(j,k+k,m)ans=max(ans,b[i][j]+d[i+k][j]+a[n][j-k]);

fp(i,k+k,n)fp(j,k,m-k)ans=max(ans,c[i][j]+d[i][j+k]+a[i-k][m]);

fp(i,k,n-k)fp(j,k,m-k)ans=max(ans,a[i][j]+c[i+k][j]+b[n][j+k]);

fp(i,k,n)fp(j,k+k,m-k)ans=max(ans,s[i][j]+a[n][j-k]+b[n][j+k]);

fp(i,k+k,n-k)fp(j,k,m)ans=max(ans,s[i][j]+a[i-k][m]+c[i+k][m]);

printf(

"%d\n

",ans);

return0;

}

view code

BZOJ 3573 公尺特運輸

bzoj 3573 傳送門 一道語文題 轉化後的題意就是使得每個節點的權值都等於 父親節點的權值 兒子數 的最小運算元 能發現一條重要的性質 只要乙個節點確定,所有節點的權值都確定了 於是我們只要列舉 1 n 每個節點權值不變,算出根節點 root 的權值出現過的最多次數 res 用 n res 即...

bzoj3000 Big Number 斯特林公式

給你兩個整數n和k,要求你輸出n!的k進製的位數。對於100 的資料,有2 n 2 31,2 k 200,資料組數t 200。顯然答案就是log k n log k left n right logk n 然後就不會做了otz 斯特林公式 n 2 n ne n n 2 n en n 於是有ans l...

BZOJ4671 斯特林反演

bzoj4671 異或圖 很有意思的題 直接處理顯然很難,我們考慮範圍擴大以求容斥或反演這類的幫助 f i 表示至少有 i 個聯通塊的方案,形如設立 i 個聯通塊輪廓,聯通塊內連邊隨意,聯通塊與聯通塊之間無連邊 g i 表示恰好有 i 個聯通塊的方案,形如設立 i 個聯通塊輪廓,在保證內部聯通的情況...