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 |
Re:大家帮忙看一下 实在挑不出错来 我是用多重背包解的报 WAIn Reply To:大家帮忙看一下 实在挑不出错来 我是用多重背包解的报 WA Posted by:DeSMoon at 2009-07-21 11:56:25 > #include<iostream> > #include<algorithm> > using namespace std; > > > int arr[100005]; > > int bill[100]; > int main(){ > int cash,n; > int tmp1,tmp2,tmp; > while(cin>>cash>>n){ > int num=0; > if(n==0||cash==0) {cout<<'0'<<endl; continue;} > memset(arr,0,sizeof(arr)); > for(int i=0;i<n;i++){ > cin>>tmp1>>tmp2; > if(tmp1>cash/tmp2) tmp1=cash/tmp2; > tmp=tmp1; > int j=0,c=0; > while(tmp1>>1){ > bill[num++]=tmp2*(1<<j); > > c+=(1<<j); > j++; > tmp1=tmp1>>1; > } > bill[num++]=tmp2*(tmp-c); > } > arr[0]=1; > for(int k=0;k<num;k++){ > for(int ii=cash;ii>=bill[k];ii--) if(arr[ii-bill[k]]) { arr[ii]=1;} > } > for(int k=cash;k>=0;k--) { > if(arr[k]) { > cout<<k<<endl; > break; > } > } > > } > cin>>n; > } 你好像没排序吧,那这段似乎就不能从ii>=bill[k]切断了吧 for(int k=0;k<num;k++){ for(int ii=cash;ii>=bill[k];ii--) if(arr[ii-bill[k]]) { arr[ii]=1;} } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator