ZCMU - 1166: 忠哥的dp(II)

简介: ZCMU - 1166: 忠哥的dp(II)

题目链接:点击打开链接


题目大意:略。


解题思路:完全背包。


AC 代码

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof a);
using namespace std;
typedef long long ll;
const int maxn=10000+10;
int dp1[maxn],dp2[maxn];
int weight[maxn];
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;i<n;i++) scanf("%d",&weight[i]);
        for(int i=0;i<maxn;i++)
        {
            dp1[i]=maxn;
            dp2[i]=-maxn;
        }
        dp1[0]=dp2[0]=0;
        for(int i=0;i<n;i++)
        {
            for(int j=weight[i];j<=m;j++)
            {
                // PS1:加判断状态是否可转移(dp[m]一定代表正好背包放满的状态的值):因为for_j循环体内,每一种可能,都要经过判断,当前状态是否可转移,若可以,则调用max,否则跳过当前状态,进入下一种状态。
                // PS2:不加判断状态是否可转移(dp[m]不一定代表正好背包放满的状态的值):因为 j 代表每一种可能性,并不代表一个确定的使用空间的量,所以 dp[m] 到最后可能是一个虚值,但是如果dp初始化时,是个负大值(注意:这个负数要足够大,使虚值到达不了正数,否则会与真值混乱),dp[m] 最终且大于0,则该 dp[m] 是真实值。
                if(j==weight[i] || dp1[j-weight[i]]!=maxn)
                    dp1[j]=min(dp1[j],dp1[j-weight[i]]+1);
                if(j==weight[i] || dp2[j-weight[i]]!=-maxn)
                    dp2[j]=max(dp2[j],dp2[j-weight[i]]+1);
            }
        }
        printf(dp1[m]==maxn?"-1":"%d",dp1[m]);
        printf(dp2[m]<=0?" -1\n":" %d\n",dp2[m]); // 临界点是 dp2[m]>0 而不是 dp2[m]==-maxn
//        if(dp2[m]>0) // 因为最大值有符合的值,那么最小值肯定有,大不了最小值==最大值
//      printf("%d %d\n",dp1[m],dp2[m]);
//    else // 最大值都小于等于0,那么最小值肯定也没有
//      printf("-1 -1\n");
    }
    return 0;
}
目录
相关文章
|
数据采集 安全 网络协议
DDoS 攻防之 HTTP Flood|学习笔记
快速学习 DDoS 攻防之 HTTP Flood
1721 0
DDoS 攻防之 HTTP Flood|学习笔记
|
数据采集 XML 存储
【Python实战】Python采集二手车数据——超详细讲解
【Python实战】Python采集二手车数据——超详细讲解
|
存储 安全 网络安全
VPN淘汰,零信任接入崛起
VPN淘汰,零信任接入崛起
296 1
|
存储 虚拟化
虚拟化技术
虚拟化(Virtualization)技术是一种资源管理技术,是将计算机的各种硬件资源,如服务器、网络、内存及存储等,以一种抽象的方式组合到一起,并提供给用户使用。它打破了硬件资源间不可切割的障碍,使用户以更好的方式来应用这些资源。
513 1
虚拟化技术
|
Web App开发 Java 测试技术
《手把手教你》系列技巧篇(二十六)-java+ selenium自动化测试-浏览器操作(详细教程)
【4月更文挑战第18天】本文介绍了Web自动化中的浏览器操作,包括如何打开不同类型的浏览器(如IE、Chrome、Firefox),以及进行页面操作如打开URL、浏览器最大化、刷新、前进和后退。还展示了如何设置浏览器位置和大小,以及获取当前URL和标题。此外,提供了项目实战例子,演示了如何用Selenium实现打开浏览器、设置位置和大小、搜索并执行页面操作的过程。文章最后提到一些其他可用的方法,并鼓励读者继续学习自动化测试相关知识。
334 3
|
Java
Java中if语句
Java中if语句
184 0
|
移动开发 应用服务中间件 nginx
统计请求nginx最多次数的IP地址
统计请求nginx最多次数的IP地址
197 0
|
架构师 JavaScript Java
对抗软件规模与复杂度的战争:救命、治病、养生
对抗软件规模与复杂度的战争:救命、治病、养生
597 0