zoj 1101 Gamblers

这题是说有一系列的数,需要找出四个数a,b,c,d使得a+b+c=d,然后要求输出最大的d,如果不存在则no solution。这些数可能出现负数。

我直接用暴力搜索过的。中间稍微优化了下。貌似有牛人有好的优化方法,都有0ms过的。上代码:

#include<stdio.h> #include<stdlib.h> int cmp(void const *a, void const *b) { int *c = (int *)a; int *d = (int *)b; return *c-*d; } int main() { int n; long s[1010]; scanf("%d",&n); int i,j,k,l; bool flag; while(n){ flag = false; for(i=0;i<n;i++){ scanf("%ld",&s[i]); } qsort(s,n,sizeof(s[0]),cmp); for(i=n-1;i>0;i--){ for(j=n-1;j>=2;j--) { if(j==i) continue; for(k=j-1;k>=1;k--) { if(k==i) continue; for(l=k-1;l>=0;l--) { if(l==i) continue; if(s[i] == s[j]+s[k]+s[l]){ flag = true; printf("%ld/n",s[i]); goto END; } } } } } if(!flag) printf("no solution/n"); END: scanf("%d",&n); } }

你可能感兴趣的:(c,优化,ini)