01背包三种方法
通用
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #define maxn 1100 using namespace std; //dp[i][j]-----表示从第i个开始选,重量不超过j的价值 int dp[maxn][maxn]; int weight[maxn],value[maxn]; int n;//总个数 int W;//允许最大重量 void init() { memset(dp,0,sizeof(dp)); scanf("%d%d",&n,&W); for(int i=0;i<n;i++) scanf("%d%d",&weight[i],&value[i]); }
dp算法
int main() { init(); for(int i=1;i<=n;i++) { for(int j=0;j<=W;j++) { if(weight[i-1]>j) dp[i][j]=dp[i-1][j]; else dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i-1]]+value[i-1]); } } cout<<dp[n][W]<<endl; return 0; }
暴力算法
int work(int nn,int wei)//到第n个,剩余重量为weight
{
int res=0;
if(nn==n)
return res;
if(wei<weight[nn])
res=work(nn+1,wei);
else
res=max(work(nn+1,wei),work(nn+1,wei-weight[nn])+value[nn]);
return res;
}
int main()
{
init();
cout<<work(0,W);
return 0;
}
别趴下,熬过黑夜就是黎明
浙公网安备 33010602011771号