題意:
有k組數,si 和 fi,s和f的範圍是 【 -1000, 1000】。
現在要挑選其中的一些組,使所選的組 si的和 與 fi的和 的和 最大, 並且 si 的和 不能小於0,fi 的和 也是。
問 滿足條件的 最大的 si 的和 與 fi 的和 的 和。。。。。。。
解析:01揹包的變形。
首先將 si 看做每個物品的費用,fi 看做體積。
然後由於有負數出現,所以把 0 點 往大了調,並在 si < 0 時相應的做遍歷的調整:
使得 每次詢問的時候,體積大的已經被訪問過。
注意上下邊界,j 都是從 0,到達最大揹包容量 maxn - 1。
**:
#include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long
#define lson lo, mi, rt << 1
#define rson mi + 1, hi, rt << 1 | 1
using namespace std;
const int maxn = 200000 + 10;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = acos(-1.0);
const double ee = exp(1.0);
int zero = 100000;
int dp[maxn];
int s[maxn], f[maxn];
int main()
memset(dp, -inf, sizeof(dp));
dp[zero] = 0;
for (int i = 0; i < n; i++)
}else}}
int ans = 0;
for (int i = zero; i < maxn; i++)
}printf("%d\n", ans);
}return 0;
}
POJ 1149 (0 1揹包變形)
題意 有n種 最多5種 商品,每種商品三個屬性,自己的名字 數字 總量,價錢。現在商家正在進行打折活動,幾種商品組合的價錢會比原價低。有s種組合每種組合第乙個數字是有n種商品組合成一起,然後n對數字 代表商品的名字和數量,最後乙個數字表示這個組合的總價錢。最後輸出,要買所有商品最少花多少錢?思路 每...
POJ 1742 Coins 揹包dp變形
poj 1742 首先多重揹包有一種普通的二進位制優化,然後這題還可以加乙個判斷如果,a i c i m 的話,那就和完全揹包一樣,不用多重揹包。這樣應該能過。第二種做法,是參考了完全揹包,完全揹包可以用o nm 的複雜度完成,是因為,遍歷m的時候沒有數量的限制。那對於這題多重揹包,就要考慮在dp裡...
揹包變形 思路
居民集會 藍橋村的居民都生活在一條公路的邊上,公路的長度為l,每戶家庭的位置都用這戶家庭到公路的起點的距離來計算,第i戶家庭距起點的距離為di。每年,藍橋村都要舉行一次集會。今年,由於村里的人口太多,村委會決定要在4個地方舉行集會,其中3個位於公路中間,1個位最公路的終點。已知每戶家庭都會向著遠離公...