6 条题解
-
1
#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
#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
> #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
#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
#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
总感觉很麻烦啊 #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
- 上传者