| ||||||||||
| 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 | |||||||||
AC!我没有使用滚动数组,望高手不吝踢教!我没有使用滚动数组,只是普通的01背包问题的解法。
C++新手,望高手不吝赐教!
#include<iostream>
using namespace std;
int main(){
int n,m,i,j,*w,*v,*f;
while(cin>>n>>m){
//申请空间
w=new int[n];
v=new int[n];
f=new int[m+1];
//读入数据
for(i=0;i<n;i++)
cin>>w[i]>>v[i];
//数据初始化
for(i=0;i<=m;i++) f[i]=0;
//计算过程
for(i=0;i<n;i++)
for(j=m;j>=w[i];j--)
if(f[j-w[i]]+v[i]>f[j])
f[j]=f[j-w[i]]+v[i];
//求最大值
int max=-1;
for(i=0;i<=m;i++)
if(f[i]>max) max=f[i];
//输出结果
cout<<max<<endl;
//释放空间
delete w,v,f;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator