• 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];    
    }
  • 相关阅读:
    Deployment.yaml文件
    Python 闭包
    github使用方法(一)
    7.Python 正则表达式学习笔记
    kindle网络爬虫续集
    windows下如何快速搭建web.py开发框架
    Python强大的自省简析
    11--Python 备份文件程序
    10- python 网络爬虫分析
    Python基础学习7---异常处理
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11296042.html
Copyright © 2020-2023  润新知