虽然没有对此的硬性要求,但还是希望不要放下吧
8.6
P17200
当时还在争10000道题呢,现在已经17200多了
完全不会了,这是一个01背包,需要用滚动数组优化,已经忘了01背包需要用倒序枚举的滚动数组
这还仅仅是一个普及
由于需要颜色不同,则需要维护最大值与次大值,还有他们的颜色也不能相同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include<algorithm> #include<iostream> #include<cstring> using namespace std; const int N=100010; int f[N][2]; int color[N][2]; int n,L; int main() { cin>>n>>L; memset(f,-1,sizeof(f)); f[0][1]=0; color[0][1]=0; for(int i=1;i<=n;i++) { int l,v,c; cin>>l>>v>>c; for(int j=L-l;j>=0;j--) { int p=-1; if(f[j][1]!=-1&&color[j][1]!=c) p=f[j][1]; else if(f[j][0]!=-1&&color[j][0]!=c) p=f[j][0]; if(p==-1) continue; int now=v+p; int len=j+l; if(now>f[len][1]) { if(color[len][1]==c) f[len][1]=now; else { f[len][0]=f[len][1]; color[len][0]=color[len][1]; f[len][1]=now; color[len][1]=c; } } else if(now>f[len][0]&&color[len][1]!=c) { f[len][0]=now; color[len][0]=c; } } } cout<<f[L][1]; }
|
CF2248B
distinct:独一无二的
只需贪心考虑第二个数组的第i个是否在第一个数组的第i个和第n-m+i个之间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<iostream> #include<algorithm> using namespace std; const int N=200010; int a[N],b[N]; void F() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>b[i]; sort(a+1,a+n+1); sort(b+1,b+m+1); if(m*2>n) { cout<<"NO"<<'\n'; return; } for(int i=1;i<=m;i++) { if(a[i]<b[i]&&a[n-m+i]>b[i]) continue; cout<<"NO\n"; return; } cout<<"YES"<<'\n'; } int main() { int T; cin>>T; while(T--) F(); }
|