6 条题解

  • 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
        @ 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
              标签
              (无)
              递交数
              431
              已通过
              137
              上传者