解題感想:
好久沒刷題了,自己連揹包dp都差不多忘了。
題目看著很複雜,可以將問題分解來看,和高中數學題的感覺一樣
1.求任意一組組合的最小的保護值 的最大值
2.求在改最大組合的情況下的,求最小的工資和,和某圖論一樣的思路。
解題思路:
第乙個揹包:
任意組合:抽象成模板 在n個應聘者中選x人使得看守m個倉庫 可以取 的最大值*****===(像揹包了),有一點特別的是選的x人就是相當 揹包中的容量,只是這裡的容量對每個物品時在變的*****求在第i個人看守k個倉庫的最小 保護值
第二格揹包:
原理和第乙個相差不多
此題和《程式設計之美》上的進購飲料差不多
#include#include#include#include#includeusing namespace std;
const int maxn=1000;
int dp[maxn];
int n,m;
int p[maxn];
int ans;
int solve()
// if(i==1)
// }}
return dp[n];
}int main()
ans=solve();
printf("%d ",ans);
printf("%d\n",solve2());
}return 0;
}
紫書 習題 9 8 uva1632
題意 有n個寶藏,每個都在乙個位置p i 在規定的時間t i 就會消失。阿里巴巴要在寶藏消失前收集齊所有寶藏,問 有方法嗎?有的話最少多少秒?思路 開始想的是用狀態轉移方程來乙個個判斷,不好寫。看了題解知道在一段區間 l,r 要使時間最短必須從端點出來,然後果斷寫了乙個記憶化搜尋,tle了。再看題解...
紫書 習題8 12 UVa 1153(貪心)
本來以為這道題是考不相交區間,結果還專門複習了一遍前面寫的,然後發現這道題的區間是不是 固定的,是在乙個範圍內 滑動的 只要右端點不超過截止時間就ok。然後我就先考慮有包含關係的時候怎麼選,然後發現當兩個區間只能放乙個的時候時間更短而截 至時間更長的時候,顯然更優。然後我就試著每個區間放的時候後後面...
紫書 習題 8 15 UVa 1617 (貪心)
先排序,然後每個線段先放右端點,然後往下放,如果不能放就整體往左移動,當不能往左移動的時候就ans 開始下乙個整塊。判斷能不能向左移動要用乙個變數儲存每個已經放了的區間中線段與左端點距離的最小值。include include define rep i,a,b for int i a i b i u...