zoukankan      html  css  js  c++  java
  • P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    ————————————————————————————————————————————————————

    总感觉第一个题解状态更新的有点问题。

    体积取max应该是在dp数组不更新的前提下进行的吧

    就写了一个分情况讨论相等与大于,不过和不分情况的一样都过了,数据问题?

    懒得造数据试试了【

    ——————————————————————————————————————————————————

    #include<bits/stdc++.h>
    using namespace std;
    int n,wt,w[22],mv[(1<<18)+5],dp[(1<<18)+5]
    int main()
    {
        memset(dp,63,sizeof(dp));
        cin>>n>>wt;
        dp[0]=1;mv[0]=wt;
        for(int i=1;i<=n;i++)cin>>w[i];
        for(int i=0;i<1<<n;i++)
        for(int j=1;j<=n;j++)
            if(!(i&(1<<j-1)))
            {
                if(mv[i]>=w[j]&&(dp[i|(1<<j-1)]>=dp[i]))
                {
                    if(dp[i|(1<<j-1)]>dp[i])
                {
                    dp[i|(1<<j-1)]=dp[i];
                    mv[i|(1<<j-1)]=mv[i]-w[j];
                }
                else mv[i|(1<<j-1)]=max(mv[i]-w[j],mv[i|(1<<j-1)]);
                }
                    
                if(mv[i]<w[j]&&(dp[i|(1<<j-1)]-1>=dp[i]))
                {
                    if(dp[i|(1<<j-1)]-1>=dp[i])
                {
                    dp[i|(1<<j-1)]=dp[i]+1;
                    mv[i|(1<<j-1)]=wt-w[j];
                }
                else mv[i|(1<<j-1)]=max(wt-w[j],mv[i|(1<<j-1)]);
                }        
            }
        cout<<dp[(1<<n)-1];    
    }
  • 相关阅读:
    C# 截取屏幕方法
    C# Tcp和Socket 网络(五)
    C# StmpClient使用 网络(四)
    C# IP地址和DNS 网络(三)
    C# WebBrowser使用 网络(二)
    C# HttpClient使用 网络(一)
    C# Transaction 事务处理 -依赖事务
    C# Transaction 事务处理 -环境事务
    LVM
    linux下安装Apache(https) 服务器证书安装配置指南
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11296042.html
Copyright © 2011-2022 走看看