动态规划之背包问题
#include<iostream>
using namespace std;
int dynamic(int *gold,int *num,int n,int sum);
int main()
{
int n;
int sum;
cin>>n;
while(n!=-1)
{
cin>>sum;
int gold[n];
int num[n];
for(int i=0;i<n;i++)
{
cin>>num[i];
}
for(int i=0;i<n;i++)
{
cin>>gold[i];
}
cout<<dynamic(gold,num,n,sum)<<endl;
cin>>n;
}
return 0;
}
int max(int a,int b)
{
int m=a;
if(b>a)
m=b;
return m;
}
int dynamic(int gold[],int num[],int n,int sum)
{
int list1[sum];
int list2[sum];
for(int i=0;i<sum;i++)
{
if(i<num[0]-1)
list1[i]=0;
else
list1[i]=gold[0];
}
for(int i=1;i<n;i++)
{
for(int j=0;j<sum;j++)
{
if(j<num[i]-1)
list2[j]=list1[j];
else if(j==num[i]-1)
{
list2[j]=max(list1[j],list2[j]);
}
else
{
list2[j]=max(gold[i]+list1[j-num[i]],list1[j]);
}
}
for(int k=0;k<sum;k++)
list1[k]=list2[k];
}
return list1[sum-1];
}

浙公网安备 33010602011771号