題意為:
有乙個長方體形狀的廢料堆,由a*b*c個廢料塊組成,每乙個廢料塊都有乙個價值,可正可負。現在要在這個長方體上選擇乙個子長方形,使組成這個子長方形的廢料塊的價值之和最大。 1<= a, b, c <=20
分析:如果採用暴力法列舉起點(x,y,z),並且列舉長寬高,則需要n^6*n^3的時間複雜度,顯示會超時。因此我們記錄每乙個點與(1,1,1)座標組成的長方體的值。在運算中通過列舉 x1,x2,y1,y2,x1為長方體的起始x座標,x2為長方體的結束x座標。y1為長方體的起始y座標,y2為長方體的結束y座標。並且列舉z的座標位置,通過記錄最大值和狀態值進行比較。最終將時間複雜度壓縮到n^5.
一般情況下可通過記錄有意義的狀態值來減少時間複雜度。
題解**為:
code1:
#include#include#include#includeusing namespace std;
const int maxn = 22;
long long cube[maxn][maxn][maxn];
void binary(int d, int& b0, int& b1, int& b2)
int sign(int d)
long long sum(int a1, int a2, int b1, int b2, int c1, int c2)
return ans;
}int main()
}for(int a = 1; a <= a; a++) }}
}long long ans = cube[1][1][1];
for(int a1 = 1; a1 <= a; a1++) }}
}}
printf("%lld\n", ans);
if(t) printf("\n");
}return 0;
}
code2:
第二種方法只記錄了c座標方向的字首和,因此最後計算和時,需要多加入一次迴圈累加。
#include#include#includeusing namespace std;
const int maxn = 22;
long long cube[maxn][maxn][maxn];
int main() }}
long long ans;
ans = cube[1][1][1];
for(int b1 = 1; b1 <= b; b1++) }}
}}
printf("%lld\n", ans);
if(t) printf("\n");
}return 0;
}
上述題目的乙個一維形式就是求乙個序列的最大連續數之和。
1. 乙個整數(可正可負)序列,有a個元素。在整數序列中選擇乙個子串行,使得子串行的和最大。
分析:通過記錄字首和,並不斷記錄和更新狀態。
**為:
#include#includeusing namespace std;
const int maxn = 100 + 10;
int a[maxn], s[maxn];
int main()
int ans, cmax;
ans = cmax = a[1];
for(int a = 2; a <= n; a++)
printf("%d\n", ans);
}return 0;
}
上述題目的二維形式如下圖所示。
2. 長方形形狀的物體,由a*b個塊組成。每個塊都有乙個價值(可正可負的整數)在長方形中選擇乙個子長方形,使得子長方形的塊的價值之和最大。
**為:
#include#includeusing namespace std;
const int maxn = 100 + 10;
int a[maxn][maxn];
int main()
}int ans, tmax;
ans = a[1][0];
for(int a = 0; a <= m; a++) }}
printf("%d\n", ans);
}return 0;
}
此題也可以通過記錄以(x,y)座標結尾的字首和來解決,這樣具有更高的通用性。 查詢及更新邊角廢料明細與總計 SQL
update trs.inv info set inv qty b1.qty select a.item no,a.inv qty,b1.qty from trs.inv info a,select b.detail item,sum a.head mark b.detail net qty fro...
堆排(大頂堆,小頂堆)
分類 資料結構 演算法相關 2009 10 15 12 26 2289人閱讀收藏 舉報汗,別人都說大小頂堆只是改改大於號的問題,可我的 從大頂堆只改動大於號調整為小頂堆竟然越界樂,掣肘!後來幾經更改才發現是傳參的問題 見 看來大頂堆改小頂堆不是 亦或是我rp出點問題?搞笑的是 磚頭 c b 竟然對越...
堆(大根堆 小根堆)
堆又可稱之為完全二叉堆。這是乙個邏輯上基於完全二叉樹 物理上一般基於線性資料結構 如陣列 向量 鍊錶等 的一種資料結構。學習過完全二叉樹的同學們都應該了解,完全二叉樹在物理上可以用線性資料結構進行表示 或者儲存 例如陣列int a 5 就可以用來描述乙個擁有5個結點的完全二叉樹。那麼基於完全二叉樹的...