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;

    }

  • 相关阅读:
    webpack实现开发、测试、生产等环境的打包切换
    Python报错
    WGAN将数值限制在一定范围内 Python代码 tf.clip_by_value(p, -0.01, 0.01))
    cmd 进入指定文件夹
    Wasserstein 距离
    MSE(均方误差)、RMSE (均方根误差)、MAE (平均绝对误差)
    inf
    plt画log图
    KL散度与JS散度
    安装指定版本的第三方包
  • 原文地址:https://www.cnblogs.com/yejinru/p/2476962.html
Copyright © 2011-2022 走看看