傳送門
題意:有n個物品的重量和價值分別是wi和vi。從中選出k個物品使得單位重量的價值最大。
題解:先取前k個元素算出s0 =∑(vi/wi) 作為初始值,然後對每乙個元素(n個)求yi=vi-s0*wi,對yi從大到小排序,取前k個元素算出s,重複上面的運算(每次迴圈後把s的值賦給s0,然後新一輪迴圈時s有通過s0計算出來),直到fabs(s-s0)<=eps,滿足精度要求。
正確性證明:
假設上輪得到的s1,則在n個元素中必存在k個元素使s1=∑(vi/wi),變形可得到∑vi-s1*∑wi=0,現對每個元素求yi=vi-s1*wi,可知必存在k個元素使∑yi=∑vi-s1*∑wi=0, 所以當我們按y排序並取前k個元素作為求其∑y時,其∑y>=0,然後對和式變形即可得到s1=((∑v-∑y)/∑w)<=(∑v/∑w)=s2,即此迭代過程是∑y是收斂的,當等號成立時,此s即為最大值。
附上**:
#include#include#include#includeusing namespace std;
const int maxn=1e5+50;
const double eps=1e-8;
int n,k;
struct node;
node nodes[maxn];
bool cmp(node a,node b)
double get()
printf("\n");
return 0;
}
牛頓迭代 牛頓下山
2009 11 18 16 59 51 分類 計算方法數學類 字型大小 訂閱 牛頓迭代法,牛頓下山迭代 include include float newtonfun float x0,float c float xiashanfun float x0,float c float fun1 floa...
重聚 牛頓迭代
給出n和p,求最小的正整數x使得x p q 有斯特林公式n 2 n n e n 取個log得log n 0.5 log 2 pi n 0.5 log n n 然後log p q q log p 不過二分是過不去的 這個函式可以牛頓迭代,就是對於乙個x,在函式上做切線,與x軸的交點作為下一次的x 複雜...
牛頓法和牛頓迭代法
牛頓法,大致的思想是用泰勒公式的前幾項來代替原來的函式,然後對函式進行求解和優化。牛頓法和應用於最優化的牛頓法稍微有些差別。牛頓法用來迭代的求解乙個方程的解,原理如下 對於乙個函式f x 它的泰勒級數展開式是這樣的 f x f x 0 f x 0 x x 0 frac f x 0 x x 0 2 f...