• HDU1171将多个不同价值不同数量的器材尽可能按等价值均分 第一份的价值尽可能的大 所以sum/2对第二份进行01背包 使其价值尽可能的大


    //hdu1171
    void solve()
    {
    for(int i=1;i<=n;i++)
    {
    for(int j=W;j>=w[i];j--)
    {
    dp[j]=max(dp[j],dp[j-w[i]]+val[i]);
    }
    }
    }
    void solve1()
    {
    for(int i=1;i<=n;i++)
    {
    for(int j=INF;j>=val[i];j--)
    {
    dp[j]=max(dp[j],dp[j-val[i]]+val[i]);
    }
    }
    }
    int main()
    {
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int t=0;
    //cin>>t;
    while(cin>>n&&n>0)
    {
    //cin>>n;
    sum=0;
    memset(dp,0,sizeof(dp));
    memset(val,0,sizeof(val));
    for(int i=1;i<=n;i++)
    {
    cin>>a[i]>>b[i];
    sum+=a[i]*b[i];
    }
    int num=0;
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=b[i];j++)
    {
    val[++num]=a[i];
    }
    }
    n=num;
    INF=sum/2;
    solve1();
    cout<<sum-dp[INF]<<" "<<dp[INF]<<endl;
    }
    return 0;
    }

  • 相关阅读:
    匿名内部类(八)
    局部内部类(七)
    局部内部类(六)
    成员内部类(五)
    成员内部类(四)
    静态内部类(三)
    静态内部类(二)
    内部类(一)
    zip解压破解
    爱剪辑软件使用
  • 原文地址:https://www.cnblogs.com/pengpenggege/p/8604786.html
Copyright © 2020-2023  润新知