zoukankan      html  css  js  c++  java
  • ural 1005 Stone Pile DP

    /*

    题目:

        把石头分成两堆,问最小的重量差值为多少。

    分析:

        先求和,然后用和的一半转为01背包。转移方程为:

        dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]);

        缩小维度后为dp[j] = max(dp[j],dp[j-w[i]]+w[i]);

    */

    #include <iostream>

    #include <cstring>

    #include <cstdio>

    using namespace std;

    const int X = 2000010;

    int dp[X],w[25],n;

    int main()

    {

        freopen("sum.in","r",stdin);

        freopen("sum.out","w",stdout);

        while(cin>>n)

        {

            if(n==1)    //输入为1时,直接输出即可

            {

                scanf("%d",&w[0]);

                cout<<w[0]<<endl;

                continue;

            }

            int sum = 0,temp,ans;

            for(int i=1;i<=n;i++)

            {

                scanf("%d",&w[i]);

                sum += w[i];

                dp[i] = 0;

            }

            temp = sum>>1;  //除二

            dp[0] = 0;

            for(int i=1;i<=n;i++)   //状态转移方程

                for(int j=temp;j>=w[i];j--)

                    dp[j] = max(dp[j-w[i]]+w[i],dp[j]);

            for(int i=temp;i>=0;i--)

                if(dp[i]!=0)    //当不为零时即为所求的一半石子重量

                {

                    ans = dp[i];

                    break;

                }

            ans = 2*ans-sum;

            ans = max(ans,-ans);

            cout<<ans<<endl;

        }

        return 0;

    }

  • 相关阅读:
    接口文档神器之apidoc
    ApiDoc 后端接口注释文档的使用
    Golang 数组和切片
    go切片展开
    Go的json解析:Marshal与Unmarshal
    golang depth read map
    golang 多级json转map
    GoLang中 json、map、struct 之间的相互转化
    利用delve(dlv)在Visual Code中进行go程序的远程调试-debug方式
    maximum-depth-of-binary-tree——找出数的最大深度
  • 原文地址:https://www.cnblogs.com/yejinru/p/2476962.html
Copyright © 2011-2022 走看看