D - Manga Market
D - Manga Market 背包dp及其优化 把a=0的店和a!=0的店分开存,a!=的按照a/(b+1)排序,a=0的按照b升序排。 有因为最坏情况是2的指数级别,所以j最多到logT ;先到a!=0店的再去a=0的,dp完了再遍历所有j,看往后面还能塞进多少a=0的店,去更新答案。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+7; typedef long long ll; ll dp[maxn][57]; struct dian{ int a,b; }; vector<dian> ld; vector<dian> ly; dian store[maxn]; bool comp(const dian &a,const dian &b){ return 1ll*b.a*(a.b+1)<1ll*a.a*(b.b+1); } bool cmp1(const dian &a,const dian &b){ return a.b<b.b; } ll ttime[maxn]; int main(){ int n,t; cin>>n>>t; int a0=0,a1=0; for(int i=1;i<=n;i++) { scanf("%d%d",&store[i].a,&store[i].b); if