• hdu1171(DP求两份物品的价值相差最小)


    题目信息:

    给出一些物品的价值和个数。分成两份,是这两份的价值相差最小(DP方法)

    http://acm.hdu.edu.cn/showproblem.php?

    pid=1171


    AC代码:

    /**
     *0-1背包问题
     *使得总背包的一半空间装尽可能多的价值
     */
    #include<iostream>
    #include<cstring>
    using namespace std;
    int dp[250000];
    int v[5500];
    int main()
    {
        int n,a,b,sum,k;
        while(cin>>n&&n>0){
            memset(dp,0,sizeof(dp));
            sum=0; k=0;
            for(int i=0;i<n;i++){
                cin>>a>>b;
                sum+=a*b;
                while(b--){
                    v[k++]=a;//全部价值装入数组
                }
            }
            dp[0]=1;
            for(int i=0;i<k;i++){
                for(int j=sum/2;j>=0;j--){
                    if(j-v[i]>=0) dp[j]=dp[j-v[i]];
                }
            }
            for(int i=sum/2;i>=0;i--){
                if(dp[i]){
                    if(sum-i>i) cout<<sum-i<<" "<<i<<endl;
                    else cout<<sum-i<<" "<<i<<endl;
                    break;
                }
            }
            /**时间长
            dp[0]=0;
            for(int i=0;i<k;i++){
                for(int j=sum/2;j>=0;j--){
                    if(j-v[i]>=0) dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
                }
            }
            if(sum-dp[sum/2]>dp[sum/2]) cout<<sum-dp[sum/2]<<" "<<dp[sum/2]<<endl;
            else cout<<sum-dp[sum/2]<<" "<<dp[sum/2]<<endl;
            **/
        }
        return 0;
    }


  • 相关阅读:
    给js function的参数设置默认值
    如何让windows服务器IIS支持.apk/.ipa文件下载
    Firefox 设置技巧
    在sql中使用了 hashbytes 函数
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    Jquery 操作 radio选中值
    gradle更新依赖库
    weex第一节-环境搭建
    安装weex-toolkit老是失败的解决办法
    Android透明度颜色值计算
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5060246.html
Copyright © 2020-2023  润新知