| ||||||||||
| 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 | |||||||||
I don't know why i got W/A.#include<stdio.h>
#include<algorithm>
FILE *fo = fopen("input.txt","r");
FILE *fp = fopen("output.txt","w");
int D[35][1010]={0};
int rotate[1010]={0};
int l[35]={0};
bool sortf(int a,int b){
return a > b;
}
int main(){
int T;
fscanf(stdin,"%d",&T);
int i,j,k;
int n,m;
int total = 0;
int ches = 0;
for(k=0;k<T;k++){
n = m = 0;
fscanf(stdin,"%d %d",&n,&m);
for(i=0;i<n;i++){
fscanf(stdin,"%d",&l[i]);
}
std::sort(l,l+n,sortf);
rotate[n] = 0;
for(i=n-1;i>=0;i--){
rotate[i] = rotate[i+1] + l[i];
}
total = 0;
ches = rotate[0];
if(ches <= m)total ++;
D[0][0] = 1;
if(l[0] <= m){
D[0][l[0]] = 1;
}
ches = rotate[1] ;
if((m-ches) < l[0] && ches <= m){
total ++;
}
l[0] = 0;
for(i=1;i<n;i++){
for(j=0;j<=m;j++){
if(D[i-1][j] != 0){
if(j + l[i] <= m){
D[i][j+l[i]] += D[i-1][j];
}
}
D[i][j] += D[i-1][j];
ches = rotate[i+1] + j;
if( (m-ches) < l[i] && ches <= m){
total += D[i-1][j];
}
}
l[i] = 0;
}
for(i=0;i<n;i++){
for(j=0;j<=m;j++){
D[i][j] = 0;
}
rotate[i] = 0;
}
rotate[n] = 0;
fprintf(stdout,"%d %d\n",k+1,total);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator