題面
這題有點像samjia2000出的三元組。。。
考慮把物品按qi從小到大排序,那麼一定有乙個分界點,使得在這個點之前的物品要麼買pi要麼買qi,這個點之後的物品要麼買pi,要麼不買(可以想象一下如果之前有乙個x不買,之後有乙個買qy,買qx不買y一定更優)。
於是設s[i]為使用至多k張優惠券買下1~i所有物品(或pi或qi)最少需要的錢(經典的二元組問題,強制選某一種然後把兩者之差扔進優先佇列即可)。然後再倒序處理用m-s[i]的錢最多能在i+1~n中買多少個pi。
**:
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
const
int maxn=100010;
int n,k,ans,cnt;
ll m,now,s[maxn];
struct node
a[maxn];
bool cmp(node a,node b)
for(int i=k+1;i<=n;i++)
now=0;cnt=n;
for(int i=n;i>=1;i--)
q.push(a[i].p);
cnt--;
}printf("%d",ans);
return
0;
}
2017紀中10 22 清蘭 貪心 優先佇列
70pts 使用柯西不等式可以證明均分一定是最優的。假設兩個數的差為 d,那麼分為 k 份時對 f x 的貢獻是 分成 k 1 份時,增量為 發現隨著 k 的增大,將 k 加一的改進值 增量的相反數 會越來越小,作用越來 越弱。因此,相當於有 n 1 個遞減序列,取出不超過 m 個使得它們的和最大。...
2017紀中10 31 Tree 構造
加入x的子樹都已變白,x為黑的畫,把x和x的所有兒子反色一下就好了。dfs一遍即可。include include using namespace std const int maxn 500010 int n bool c maxn f maxn struct edge con maxn intr...
2017紀中10 31 Calculate 數論
題面 考慮二分答案t。問題轉化成如何高效計算s t 化式子 分開來除,加上他們的餘數和的貢獻。發現ai最大1000,考慮把 ai,bi 按照ai分類,每一類維護cnt,sum,rst 0 ai 1 分別表示數對的個數,bi ai的和,bi ai取值的字首和,那麼對於每乙個ai都可以o 1 計算,對於...