01背包

来源:互联网 发布:组态软件免费下载 编辑:程序博客网 时间:2024/05/22 04:23
01背包 有N元求取K件是的w[i]*v[i]和最大#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1000 +  10;const int maxn1 = 30000 +  10;int n,m;int v[maxn];int p[maxn];int dp[30][maxn1];///用dp[i][j]表示前i个花费j元的最优解。void solve(){    scanf("%d%d",&n,&m);    for(int i = 1;i<=m;i++)    {        scanf("%d%d",&v[i],&p[i]);    }    for(int i =1;i<=m;i++)    {        for(int j = 0;j<=n;j++)        {            if(j>v[i])            {                dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+v[i]*p[i]);            }else            {                dp[i][j] = dp[i-1][j];            }        }    }    printf("%d\n",dp[m][n]);}int main(){    solve();    return 0;}
0 0
原创粉丝点击