zoukankan      html  css  js  c++  java
  • 01背包 (大数据)

    经典的01背包问题,如果把限制条件改为:重量<=10^9时,或更大时,就不能用以前的方法了,,在复杂度为O(nw)的经典解法下也妥妥得TLE

    SO...这里要改变DP对象,为价值

    dp[i]表示价值为i时的总重量最小值

    注意初始化:除dp[0]外,其余的为无穷大

    #include <iostream>
    #include<stdio.h>
    #define INF 10000000
    using namespace std;
    int c[105],v[105];
    int dp[10005];              //dp[i],表示在价值i下的最小重量
    int main()
    {
        //freopen("1.txt","r",stdin);
    
        int w,n;
        int i,j;
        int ans;
        while(cin>>n>>w)
        {
            ans=0;
            for(i=0;i<10000;i++)
                dp[i]=INF;
            dp[0]=0;
            for(i=0;i<n;i++)
                cin>>v[i]>>c[i];
            for(i=0; i<n; i++)
                for(j=10000; j>=c[i]; j--)
                {
                    dp[j]=min( dp[ j-c[i] ] + v[i] , dp[j] );
                }
            for(i=0; i<10000; i++)
                if(dp[i]<=w&&ans<i)
                    ans=i;
    
            cout<<ans<<endl;
    
        }
        return 0;
    }


     

  • 相关阅读:
    ...
    RUP,XP,敏捷原理
    JSP的内置对象——SESSION
    JSP的内置对象——REQUEST
    节点属性
    RUP,XP,敏捷原理
    寄存器
    设置背景图片
    Java代码空格问题
    数据库常见错误
  • 原文地址:https://www.cnblogs.com/frankM/p/4399508.html
Copyright © 2011-2022 走看看