免费申请网站首选百度,wordpress qqoq,甘肃省建设厅质量投诉网站,php模板网站怎么修改传送门 题意#xff1a;一个人有n个程序#xff0c;每个程序都有占的缓存和价值。现在要释放m及以上的缓存#xff0c;求失去的价值的最小值。
题解 首先我们知道如果所有缓存加起来 m 的话#xff0c;直接输出 - 1 就行啦。 其次呢#xff0c;我们发现价值只有1和2…传送门 题意一个人有n个程序每个程序都有占的缓存和价值。现在要释放m及以上的缓存求失去的价值的最小值。
题解 首先我们知道如果所有缓存加起来 m 的话直接输出 - 1 就行啦。 其次呢我们发现价值只有1和2两个值如果把两个价值分开来看显然选择同价值中占缓存多的最优。那么我们首先把他们各自按照缓存从大到小排个序让后枚举价值为 1 的记录前缀和为s那么只需要在另一个数组里 lower_bound 一下 m - s 在哪里即可。 这样看来这个题是老经典模型啦可能是这几天天天摆烂没看出来。
代码写的时候有点混乱仅供参考。。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N1000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n,m;
vectorinta,b;
int pre1[N],pre2[N];
struct Node
{int a,b;
}node[N];int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);int _; cin_;while(_--){a.clear(); b.clear();scanf(%d%d,n,m);for(int i0;in1;i) pre1[i]pre2[i]0;LL s0;for(int i1;in;i) scanf(%d,node[i].a),snode[i].a;for(int i1;in;i){scanf(%d,node[i].b);if(node[i].b1) a.pb(node[i].a);else b.pb(node[i].a);}if(sm) { puts(-1); continue; }sort(a.begin(),a.end()); sort(b.begin(),b.end(),greaterint());for(int i0;ib.size();i) pre2[i1]pre2[i]b[i];pre2[0]-INF; pre2[b.size()1]INF;na.size();int ansINF; a.pb(0);int sum0;for(int in;i0;i--){suma[i];if(summ) break;if(summ){ansmin(ans,n-i);break;}int restm-sum;int poslower_bound(pre21,pre21(int)b.size(),rest)-pre2;if(pos(int)b.size()) continue;ansmin(ans,n-ipos*2);}printf(%d\n,ans);}return 0;
}
/**/