題意:
給出n條線段,以公尺的單位給出,小數點後兩位(精確到厘公尺),要你對這些線段裁剪,裁剪出m條等長的線段,並且讓這些線段盡可能長另外線段的長度不能小於1厘公尺,如果籌不夠m條,輸出0.00
思路:1.轉換成整數 接著套模板就可以了
2.check函式 裡如果sum >= k說明此時可以拆分成k個 然後把區間右移 找更大的
#include #include尋找可行解_未test#include
using
namespace
std;
const
int mod = 1e9 + 7
;const
int maxn = 10000 + 5
;const
int inf = 0x3f3f3f3f
;const
double eps = 1e-7
;typedef
long
long
ll;int
a[maxn];
intn,k;
double
len;
bool check(int
d)
return sum >=k;
}int
main ()
int ans = 0
;
int le = 1,ri = max; //
因為已經規劃成整數問題了 所以開始就是1如果是0 會崩潰
while (le <=ri)
printf(
"%.2f\n
",(double) ans/100.0
); }
return0;
}
//double型別還不熟練
#include #include未test_可能會有精度問題#include
using
namespace
std;
const
int mod = 1e9 + 7
;const
int maxn = 10000 + 5
;const
int inf = 0x3f3f3f3f
;const
double eps = 1e-3
;typedef
long
long
ll;double
a[maxn];
intn,k;
bool check(double
d)
return sum >=k;
}int
main()
printf(
"%.2f\n
",floor (ans*100)/100
); }
return0;
}
題意:有n個物品的重量和價值分別是wi 和 vi。從中選出k個物品使得單位重量的價值最大
思路:書上有思路 //利用單位價值貪心 不對的
#include //最大化平均值最大化平均值
#include #include
using
namespace
std;
const
int mod = 1e9 + 7
;const
int maxn = 10000 + 5
;const
int inf = 0x3f3f3f3f
;typedef
long
long
ll;int
n,k;
intw[maxn],v[maxn];
double
s[maxn];
bool check (double
d) sort(s,s+n);
double sum = 0
;
for(int i=0; i)
return sum >= 0;}
intmain()
printf(
"%.2f\n
",ans);
}return0;
}
二分總結 挑戰
最後實在不知道輸出mid left 還是right,就把mid mid 1 mid 1根據特定的順序都判斷一遍就不會出錯。普通的二分。1 切小木棍 最經典的就是從n個小木棍裡面切除k個最長的,求出最長的長度。題目鏈結 有兩種寫法,一種是取mid100次,另一種是卡r l 1e9等,但是不要卡的太小,...
數學問題 二分求冪例題
例 4.10 人見人愛 a b 題目描述 求 a b 的最後三位數表示的整數。說明 a b 的含義是 a 的 b 次方 輸入 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數 a 和 b 組成 如果 a 0,b 0,則表示輸入資料的結束,不做處理。輸出 對於每個測試例項,請輸出 a b 的最後...
二分模板以及經典例題
演算法思路 演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。當我們將區間 l,r 劃分成 l,mid 和 mid 1,r 時,其更新操作是r mid或者l mid 1 計算mid時不需要加1。int bsearch 1 int l,int r re...