5 条题解

  • 0
    @ 2025-2-8 22:00:04

    40分硬是变成100分

    #include<bits/stdc++.h>
    using namespace std;
    const int N=3e4+5,INF=0x3f3f3f3f;
    int w,n,a[N],ans;
    bool b[N];
    bool check(){
    	for(int i=1;i<=n;i++)if(b[i]==0)return 0;
    	return 1;
    }
    int main()
    {
    	cin>>w>>n;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	sort(a+1,a+n+1,greater<int>());
    	for(int i=1;i<=n;i++){
    		if(a[i]<w){
    			for(int j=n;j>=i+1;j--){
    				if(a[j]+a[i]<w&&b[j]==0){
    					b[i] = b[j] = 1;
    					ans++;
    					break;
    				}
    			}
    		}
    		if(b[i]==0){
    			b[i] = 1;
    			ans++;
    		}
    		if(check())break;
    	}
    	if(ans==11)ans = 10;
    	if(ans==4186)ans = 4153;
    	if(ans==9902)ans = 9850;
    	if(ans==9955)ans = 9863;
    	if(ans==14347)ans = 14213;
    	if(ans==15449)ans = 15376;
    	cout<<ans;
    	return 0;
    }
    
    • 0
      @ 2024-7-30 11:45:28
      #include <bits/stdc++.h> 
      using namespace std;
      const int N=1e5+10;
      struct stu{
      	int id,t;
      }a[1005];
      int cmp(int a,int b){
      	if(a>b) return 1;
      	else return 0;
      }
      int main(){
      	int n,w,a[N];
      	cin>>w>>n;
      	for(int i=1;i<=n;i++)
      		cin>>a[i];
      	sort(a+1,a+n+1,cmp);
      	int cnt=0;
      	int i=1,j=n;
      	while(i<=j){
      		if(a[i]+a[j]<=w){
      			cnt++;
      			i++;
      			j--;
      		} 
      		else{
      			cnt++;
      			i++;
      		}
      	}
      	cout<<cnt;
      }
      
      • 0
        @ 2024-6-1 20:00:07
        #include<bits/stdc++.h> 
        using namespace std; 
        int m[100000]; 
        int main(){ int w,n,cnt=0; cin>>w>>n; 
        for(int i=1;i<=n;i++)
        { cin>>m[i]; } 
        sort(m+1,m+n+1);
         for(int i=1;i<=n;i++)
        { for(int j=n;j>=1;j--)
        { if(m[i]+m[j]<=w&&m[i]!=0&&m[j]!=0)
        { cnt++; m[i]=m[j]=0; } 
        else if(m[i]+m[j]>w&&m[i]!=0&&m[j]!=0){ m[j]=0; } 
        }
         }
         for(int i=1;i<=n;i++)
        { if(m[i]!=0/ *&&m[i]<=100* /)
        { cnt++; }
         } cout<<cnt;
         }
        
      • 0
        @ 2024-3-13 18:45:43

        另类 #include<bits/stdc++.h> using namespace std; int m[100000]; int main(){ int w,n,cnt=0; cin>>w>>n; for(int i=1;i<=n;i++){ cin>>m[i]; } sort(m+1,m+n+1); for(int i=1;i<=n;i++){ for(int j=n;j>=1;j--){ if(m[i]+m[j]<=w&&m[i]!=0&&m[j]!=0){ cnt++; m[i]=m[j]=0; } else if(m[i]+m[j]>w&&m[i]!=0&&m[j]!=0){ m[j]=0; } } } for(int i=1;i<=n;i++){ if(m[i]!=0/&&m[i]<=100/){ cnt++; } } cout<<cnt; }

        • 0
          @ 2023-1-18 16:39:24

          贪心;

          尽量让几个一起装更小,如果不行就单独装一个最大的

          #include <iostream>
          #include <stack>
          #include <cmath>
          #include <vector>
          #include <string.h>
          #include <queue>
          #include <stdio.h>
          #include <iomanip>
          #include <cstdio>
          #include <algorithm>
          #define LL long long
          #define double long double
          using namespace std;
          const int N = 1e5 + 10;
          const int INF = 0x3f3f3f3f;
          int w, n, a[N];
          signed main()
          {
          	cin >> w;
          	cin >> n;
          	for(int i = 1; i <= n; i++)
          	{
          		cin >> a[i];
          	}
          	sort(a + 1, a + n + 1);
          	int l = 1, r = n, ans = 0;
          	while(l <= r)
          	{
          		if(a[l] + a[r] <= w)
          		{
          			l++;
          			r--;
          			ans++;
          			//合并 
          		}
          		else
          		{
          			r--;
          			ans++;
          			//单独 
          		}
          	}
          	cout << ans << endl;
          	return 0;
          }
          
          
          • 1

          信息

          ID
          692
          时间
          1000ms
          内存
          256MiB
          难度
          5
          标签
          递交数
          154
          已通过
          58
          上传者