8 条题解

  • 1
    @ 2024-10-1 16:43:02

    #include <stdio.h>

    int main()

    {

    int s;

    scanf("%d",&s);

    while(s--){

    int w,n;

    scanf("%d %d",&w,&n);

    int sum=0;

    int a[n];

    for(int i=0;i<n;i++){

    scanf("%d",&a[i]);

    }

    for(int i=0;i<n-1;i++){

    for(int j=0;j<n-1-i;j++){

    if(a[j]>a[j+1]){

    int t=a[j+1];

    a[j+1]=a[j];

    a[j]=t;

    }

    }

    }

    int i=0, j=n-1;

    while(i<=j){

    if(a[i]+a[j]<=w){

    i++;

    }

    j--;

    sum++;

    }

    printf("%d\n",sum);

    }

    return 0;

    }

    • 1
      @ 2023-11-7 23:25:14

      #include<stdio.h> #include<string.h> int vis[205]; int main() { int t; scanf("%d", &t); while (t --) { int k, n; int sum = 0; scanf("%d %d", &k, &n); int a[n + 1]; vis[0] = 1; for (int i = 1; i <= n; i ++) { scanf("%d", &a[i]); vis[a[i]] ++; } int max = 200; while (vis[max] == 0) max --; while (max) { vis[max] --; sum ++; int c = k - max; while (vis[c] == 0) c --; if (c) vis[c] --; while (vis[max] == 0) max --; } printf("%d\n", sum); memset(vis, 0, sizeof(vis)); } return 0; }

      • 1
        @ 2023-10-21 15:41:01
        #include<algorithm>
        using namespace std;
        int i, j, N, maxload, num, cnt, nums[1009], left, right;
        bool cmp(int a, int b) {
        	return a < b;
        }
        int main (void) {
        	scanf("%d", &N);
        	while (N--) {
        		cnt = 0;
        		scanf("%d %d", &maxload, &num);
        		for (i = 0; i < num; i++) {
        			scanf("%d", &nums[i]);
        		}
        		sort(nums, nums + num, cmp);
        //		for(i=0;i<num;i++){
        //			printf("%d ",nums[i]);
        //				}
        //		printf("\n");
        		left = 0;
        		right = num - 1;
        		j = 1;
        		while (left <= right) {
        //			printf("变之前:\n");
        //			printf("第%d次:   left=%d   right=%d \n", j, left, right);
        			if (nums[left] + nums[right] <= maxload) {
        				cnt++;
        				left++;
        				right--;
        
        			} else {
        				right--;
        				cnt++;
        			}
        			if (left >right) {
        				break;
        			}
        //			printf("变之后:\n");
        //			printf("第%d次:   left=%d   right=%d \n", j, left, right);
        //			printf("cnt=%d\n",cnt);
        			j++;
        		}
        		printf("%d\n", cnt);
        	}
        }
        
        • 0
          @ 2024-10-16 17:51:40

          #include <stdio.h>

          int main() {

          int s; scanf("%d",&s); while(s--){ int w,n; scanf("%d %d",&w,&n); int a[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ for(int j=0;j<n-1-i;j++){ int temp=0; if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } int count=0; int b=n-1; for(int i=0;i<=b;i++){ if(a[i]+a[b]<=w){ count++; b--; }else{ b--; i--; count++; } } printf("%d\n",count); } return 0; }

          • 0
            @ 2023-10-21 19:49:24
            > #include<iostream>
            using namespace std;
            int main(){
                int s;
                cin>>s;
                while(s--){
                     int w,n;//承重 人数 
                     cin>>w>>n;
                     int a[n+1];
                     for(int i=0;i<n;i++){
                        cin>>a[i];//输入每个人kg 
                     } 
                     for(int i=0;i<n;i++){//冒泡 
                        for(int j=0;j<n-i-1;j++){
                            if(a[j]>a[j+1]){
                                int temp=a[j];
                                a[j]=a[j+1];
                                a[j+1]=temp;
                            }
                        }
                     }
                     int tiaoshu=0;
                     int end=n-1;       
                     for(int i=0;i<=end;i++){
                        if(a[i]+a[end]<=w){
                            tiaoshu++;
                            end--;
                        }
                        else{
                            tiaoshu++;
                            end--;
                            i--;
                        }
                     }cout<<tiaoshu<<endl;
                }
            }
            
            
            • 0
              @ 2023-10-19 15:39:49
              #include<iostream>
              using namespace std;
              int main()
              {
                  int s,w,n;
                  cin >> s;
                  while(s--)
                  {
                      cin >> w >> n;
                      int a[300+5]={0};
                      for(int i=0 ; i<n ; i++)
                      {
                          cin >> a[i];
                      }
                      int temp;
                      for(int i=0 ; i<n-1 ; i++)
                      {
                          for(int j=0 ; j<n-i-1 ; j++)
                          {
                              if(a[j]>a[j+1])
                              {
                                  temp=a[j];
                                  a[j]=a[j+1];
                                  a[j+1]=temp;
                              }
                          }
                      }
                      int cnt=0;
                      for(int i=0,j=n-1 ; i<=j;)
                      {
                         if(a[i]+a[j]<=w)
                         {
                          cnt++;
                          i++;
                         }
                         else
                         {
                          cnt++;
                         }
                         j-- ;
                      }
                      cout << cnt <<endl;
                  }
                  return 0;
              }
              
              • 0
                @ 2023-10-18 21:16:34
                #include <stdio.h>
                int ar[1000];
                int main()
                {
                	int n,max,pe,chuan,t,j,i;
                	scanf("%d",&n);
                	while(n--){
                		scanf("%d%d",&max,&pe);
                		chuan=pe;
                		for(i=0;i<pe;i++){
                			scanf("%d",&ar[i]);
                		}
                		for(i=0;i<pe-1;i++){
                			for(j=0;j<pe-1-i;j++){
                				if(ar[j]>ar[j+1]){
                					t=ar[j+1];
                					ar[j+1]=ar[j];
                					ar[j]=t;
                				}
                			}
                		}
                		for(i=0,j=0;pe-i-1>j;i++){
                			if(ar[j]+ar[pe-i-1]<=max){
                				chuan--;
                				j++;
                		}  
                		}
                		printf("%d\n",chuan);		
                	}
                	return 0;
                  }
                
                • 0
                  @ 2023-10-9 20:41:04
                  总感觉很麻烦啊
                  #include <stdio.h>
                   
                  #define MAX 305
                   
                  int main()
                  {
                      int T = 0;
                      scanf("%d", &T);    ///获取测试数据组数
                   
                      while(T--)
                      {
                          int weight_people[MAX]; ///记录每个人的体重的数组
                          int vis[MAX];   ///记录每个人是否被删除的数据,vis[i] = 0表示这个人已经被运走,不能进行组合
                          int weight = 0; ///船的最大载重数
                          int num_people = 0; ///人的数量
                          scanf("%d%d", &weight, &num_people);
                   
                          for(int i = 0; i < num_people; i++)
                          {
                              scanf("%d", &weight_people[i]); ///循环输入每个人的体重
                              vis[i] = 1; ///标记每个人
                          }
                   
                          int ans = 0;    ///总集合数
                   
                          for(int i = 0; i < num_people; i++)  ///循环遍历
                          {
                              if(0 == vis[i])     ///如果这个人被运走,计算下一个人
                              {
                                  continue;
                              }
                   
                              int key = -1;   ///判断是否有人组合
                              int max = -2;   ///目前组合的体重
                   
                              for(int j = 0; j < num_people; j++)
                              {
                                  if(0 == vis[j] || i == j)     ///如果这个人被运走或者和进行比对的人重复,计算下一个人
                                  {
                                      continue;
                                  }
                   
                                  if(weight_people[i] + weight_people[j] <= weight) ///如果装的下两个人
                                  {
                                      if(weight_people[i] + weight_people[j] > max)   ///这两个人的体重最大
                                      {
                                          key = j;
                                          max = weight_people[i] + weight_people[j];
                                      }
                                  }
                              }
                              if(-1 != key) ///如果装的下两个人
                              {
                                  vis[i] = vis[key] = 0;    ///标记这两个人
                                  ans ++; ///总集合数+1;
                              }
                              if(-1 == key)   ///没有能与a组合的人,独自上船
                              {
                                  vis[i] = 0;
                                  ans++;
                              }
                          }
                   
                          printf("%d\n", ans);
                      }
                  }
                  
                  • 1

                  信息

                  ID
                  148
                  时间
                  3000ms
                  内存
                  128MiB
                  难度
                  6
                  标签
                  (无)
                  递交数
                  519
                  已通过
                  172
                  上传者