| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
最多是O(n^3 * L) 优化一下可以O(n^3) 欧这个程序有问题么?为什么会wa 呢?In Reply To:似乎不是NPC的 因为有限制了。。。 Posted by:Bamboo at 2003-06-13 16:16:51 #include <stdio.h>
#include <string.h>
int n,L[101],sum,max,Len,N;
bool got[5001],used[101];
int pre[5001];
/*
void Q_sort(int p,int r){
if(p >= r) return ;
int i = p - 1, j = r + 1, x = L[(p + r) / 2],t;
while(true){
do j-- while(L[j] > x);
do i++ while(L[i] < x);
if(i >= j) break;
t = L[i]; L[i] = L[j]; L[j] = t;
}
Q_sort(p,j);
Q_sort(j+1,r);
}
*/
bool test(){
memset(used,0,sizeof(used));
int i,j,k;
for(i=0; i<N; i++){
memset(got,0,sizeof(got)); got[0] = true;
memset(pre,0,sizeof(got));
for(j=0; j<n; j++)
if (! used[j] ){
for(k = L[j]; k <= Len; k++)
if(got[k - L[j]]){
pre[k] = j; got[k] = true;
}
if(got[Len]) break;
}
if(! got[Len] ) return 0;
k = Len;
while (k > 0){
used[pre[k]] = true;
k -= L[pre[k]];
}
}
return true;
}
int main(){
int i;
while(scanf("%d",&n), n != 0){
for(i = max = sum = 0; i<n; i++){
scanf("%d",&L[i]); sum += L[i];
if(L[i] > max) max = L[i];
}
// Q_sort(0,n-1);
for(N = n; N>0; N--)
if(sum % N == 0){
Len = sum / N; if(Len < max) continue;
if(test()){
printf("%d\n",Len); break;
}
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator