#include <iostream> #include <algorithm> using namespace std; int c[100]; int d[100]; int a[100]; int main(){ int n,m; cin>>n>>m; for(int i= 0;i<n;i++) cin>>a[i]; for(int i= 0;i<m;i++) cin>>c[i]; sort(c,c+m,greater<int>()); for(int i= 0;i<m;i++) d[i]= c[i]; sort(a,a+n,greater<int>()); int ok = false; int t[n]; for(int i=0;i<n;i++) t[i] = -1; int plecak = 0; int gdzie = 0; int ile = 0; int M = 100000; int minPlecak = 100; while(M--){ for(int i=0;i<n;i++) t[i] = -1; for(int i= 0;i<m;i++) c[i]= d[i]; plecak = 0; gdzie = 0; ile=0; while(1){ //cout<<a[gdzie]< if(t[gdzie]==-1 && a[gdzie] <= c[plecak]){ // cout<<plecak<<" "<<a[gdzie]<<"\n"; t[gdzie] = plecak; c[plecak] -= a[gdzie]; ile++; } gdzie++; if(ile>=n){if(plecak+1<minPlecak){minPlecak = plecak+1;} break;} if(gdzie>=n){ plecak++; gdzie = 0; } if(plecak>=m or plecak>=minPlecak)break; } for(int i=0;i<n;i++){ int h=rand() %n; swap(a[i],a[h]); } } if(minPlecak<=n) cout<<minPlecak; else cout<<"NIE\n"; return 0; }
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include <iostream> #include <algorithm> using namespace std; int c[100]; int d[100]; int a[100]; int main(){ int n,m; cin>>n>>m; for(int i= 0;i<n;i++) cin>>a[i]; for(int i= 0;i<m;i++) cin>>c[i]; sort(c,c+m,greater<int>()); for(int i= 0;i<m;i++) d[i]= c[i]; sort(a,a+n,greater<int>()); int ok = false; int t[n]; for(int i=0;i<n;i++) t[i] = -1; int plecak = 0; int gdzie = 0; int ile = 0; int M = 100000; int minPlecak = 100; while(M--){ for(int i=0;i<n;i++) t[i] = -1; for(int i= 0;i<m;i++) c[i]= d[i]; plecak = 0; gdzie = 0; ile=0; while(1){ //cout<<a[gdzie]< if(t[gdzie]==-1 && a[gdzie] <= c[plecak]){ // cout<<plecak<<" "<<a[gdzie]<<"\n"; t[gdzie] = plecak; c[plecak] -= a[gdzie]; ile++; } gdzie++; if(ile>=n){if(plecak+1<minPlecak){minPlecak = plecak+1;} break;} if(gdzie>=n){ plecak++; gdzie = 0; } if(plecak>=m or plecak>=minPlecak)break; } for(int i=0;i<n;i++){ int h=rand() %n; swap(a[i],a[h]); } } if(minPlecak<=n) cout<<minPlecak; else cout<<"NIE\n"; return 0; } |