求动态规划--二维01背包问题代码!Java代码!

问题描述:给定n种物品和一背包。物品i的重量是wi,体积是vi,其价值是vi,背包容量c,背包体积为d。问如何选择装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包的的物品时,每种物品只有两种选择,即装入背包或不装入背包,不能将物品i装入背包多次,也不能只装入物品的部分。

求代码!

一维的时候还好,二维的不知道怎么编码了! 求Java代码!

谢谢大神们!!

http://www.cnblogs.com/xiaofanke/archive/2012/08/22/2651290.html

http://www.cnblogs.com/xiaofanke/archive/2012/08/22/2651290.html


 int main()
{
    int n, v;
    int w[100];
    int c[100];
    int dp[100][100];
    //n代表有多少个物品 v代表背包的容量
    while(~scanf("%d%d", &n, &v))
    {
        for(int i = 1; i <= n; ++ i)
        {
            scanf("%d", &c[i]);
            //c[i]代表第i件物品所需要的空间
        }   

        for(int i = 1; i <= n; ++ i)
        {
            scanf("%d", &w[i]);
            //w[i]代表第i件物品的价值
        }

        memset(dp, 0, sizeof(dp));

        for(int i = 1; i <= n; ++ i)
        {
            for(int j = 1; j <= v; ++ j)
            {
                dp[i][j] = dp[i - 1][j];
                if(j >= c[i])
                {
                //买与不买两种选择
                    dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - c[i]] + w[i]);
                }       
            }
        }
        printf("%d\n", dp[n][v]);
    }
    return 0;
}