給出乙個a×b
×c
≤5000
a×b×c\leq5000
a×b×c≤
5000
的立體,其中有一些方塊被打上標記,你每次可以選擇x×y
×z
x×y×z
x×y×
z的方塊,並且消去其中所有打上標記的點,而花費的代價是min
min\
min,求問最少的花費把所有的標記的點全部消掉。
考慮二維平面的問題,一定是分割為若干個1×b
1×b1×
b和1×
c1×c
1×c的條狀是最好的,構造乙個二分圖:左邊代表行,右邊代表列,對每個點就在行和列之間連邊。然後要求的就是乙個最小點覆蓋,而最小點覆蓋等於最大匹配。
再考慮三維的情形,由於a×b
×c
≤5000
a×b×c\leq5000
a×b×c≤
5000
,m in
≤5000
3min\\leq\sqrt[3]
min≤35
000
,所以只要按照最小的那一維暴力列舉,列舉到的這一面直接花費1
11的代價刪除。
#includeusing namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll inf=long_long_max;
const int n=5e3+7;
int x[n],y[n],z[n];
vectorg[n];
int a,b,c,tot=0;
bool vis[n];
int used[n],link[n];
int tim=0;
int dfs(int u)
} return 0;
}int solve(int val)
int add=0;
for(int i=0;ifor(int i=1;i<=tot;i++)
} for(int i=1;i<=b;i++)
return add;
}int main() }}
} if(b==mi)
else if(c==mi)
int ans=2e9;
for(int i=0;i<(1
printf("%d\n",ans);
} return 0;
}
洛谷P1576 最小花費
在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額裡扣除百分之幾的手續費,請問a最少需要多少錢使得轉賬後b收到100元。輸入格式 第一行輸入兩個正整數n,m,分別表示總人數和可以互相轉賬的人的對數。以下m行每行輸入三個正整數x,y,z,表...
洛谷 P2085 最小函式值
有n個函式,分別為f1,f2,fn。定義fi x ai x 2 bi x ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入格式 輸入資料 第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。ai 10...
最小密度路徑 洛谷p1730
給出一張有n個點m條邊的加權有向無環圖,接下來有q個詢問,每個詢問包括2個節點x和y,要求算出從x到y的一條路徑,使得密度最小 密度的定義為,路徑上邊的權值和除以邊的數量 輸入格式 第一行包括2個整數n和m。以下m行,每行三個數字a b w,表示從a到b有一條權值為w的有向邊。再下一行有乙個整數q。...