首页 > 其他分享 >二维动态规划+子集和

二维动态规划+子集和

时间:2024-01-21 12:00:28浏览次数:28  
标签:int 用时 二维 子集 辆车 ans 动态 dp

题目:

查看代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e3+7;
const ll mod = 1e5+7;
int n, s;
int dp[N][N], a[N];

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n;
    for(int i = 1; i <= n; ++ i)
    {
        cin >> a[i];
        s += a[i];//总时间
    }
    dp[0][0] = 1;
    for(int i = 1; i <= n; ++ i)
    {
        for(int j = 1; j <= s; ++ j)
        {
            dp[i][j] = dp[i-1][j] | dp[i-1][j-a[i]];//表示i台车,j分钟,第二种要第i台
        }
    }
    int ans = mod;
    for(int i = 1; i <= s; i ++)
    {
        if(dp[n][i])
        {
//选择两台机器中数值大的
            ans = min(ans, max(i, s-i));
        }
    }
    cout << ans << '\n';
    return 0;
}

方法 2维dp:

首先计算总时间s(这个是最大的时间不可能超过)

dp[0][0]初始化为1

然后用子集和即并集 

然后动态规划方程:

是一个并集方程

  dp[i][j] = dp[i-1][j] | dp[i-1][j-a[i]];//表示i台车,j分钟,第二种要第i台

 dp[i][j] 表示到第i辆车用时为j可以由两种情况转移而来

(1)dp[i-1][j]不包括第i辆车用时为j

(2)dp[i-1][j-a[i]]加上第i辆车用时才到j,所以i-1辆车用时为j-a[i]

最后计算最小时间

从二者取最小

从已求ans和当前两台机器各洗时间最大值取最小

ans = min(ans, max(i, s-i)); 此时的i表示当前洗衣机用时,s-i表示另个洗衣机用时!

 

标签:int,用时,二维,子集,辆车,ans,动态,dp
From: https://www.cnblogs.com/luckyyaoyao/p/17977684

相关文章

  • 模拟jdk动态代理(完整版)
    实现思路1:定义一个字符串s2:加载s利用流生成对应的java文件3:通过类加载器加载java文件生成class文件4:通过class生成代理对象5:测试成功我使用过jdk代理的场景1:通过拦截request对象,代理其中的get参数的方法来过滤敏感词2:通过阅读aop源码发现,底层用的也是动态代理(jdk,cglib)3:jdk代......
  • Qt如何调用VS编写的动态链接库(dll文件)
     下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。.h文件#ifndef_MYDLL_H#define_MYDLL_H#ifdefMYDLL_EXPORTS#defineMYDLL_API__declspec(dllexport)#else#defineMYDLL_API__declspec(dllimport)#endifextern"C"MYDLL_......
  • Matlab-pcolor绘制二维色温图并修改温度条颜色
    figure(3)pcolor(time,yData',data1.ConVel')shadinginterp;colorbar;color_1=[0,0,1];color_2=[1,1,1];color_3=[1,0,0];num12=45;num23=25;R_mat=[linspace(color_1(1),color_2(1),num12),linspace(color_2(1),color_3(1),num23)];G_mat=[linspace(col......
  • 动态规划--摆花(二维dp)
    #include<iostream>usingnamespacestd;//dp[i][j]表示第i种花位置,第j个位置为止longlongintdp[120][120];longlonginta[160];intmain(){intn,m;cin>>n>>m;//n种花m盆for(inti=1;i<=n;i++){cin>>a[i];}dp[0][0]=1;for(inti=1;i<=n;......
  • spring--JDK动态代理的实现原理
    JDK动态代理的实现原理涉及到Java的反射机制。它允许在运行时动态创建一个代理类,这个代理类实现了一组接口,并将所有方法调用转发到一个InvocationHandler实例。下面是JDK动态代理的实现原理的详细步骤:定义接口:首先,定义一个或多个接口,这些接口声明了需要被代理的方法。......
  • spring--CGLIB动态代理的实现原理
    CGLIB(CodeGenerationLibrary)是一个强大的、高性能、高质量的代码生成库,它可以在运行时扩展Java类和实现Java接口。CGLIB动态代理是基于继承的方式来实现的,它不需要接口,可以代理普通类。以下是CGLIB动态代理的实现原理:继承:CGLIB动态代理通过继承目标类来创建子类,并在......
  • spring--JDK动态代理和CGLIB代理的区别
    JDK动态代理和CGLIB代理是Java中常用的两种动态代理实现方式,它们各有特点和适用场景:JDK动态代理:JDK动态代理是基于接口的代理方式,它使用Java反射机制来创建代理对象,并要求目标对象实现一个或多个接口。在代理过程中,JDK动态代理会创建一个实现了目标对象所有接口的代......
  • 动态代理IP如何选择?
    IP地址是由IP协议所提供的一种统一的地址格式,通过为每一个网络和每一台主机分配逻辑地址的方式来屏蔽物理地址的差异。根据IP地址的分配方式,IP可以分为动态IP与静态IP两种。对于大部分用户而言,日常使用的IP地址均为动态IP地址。从代理IP的角度而言,大多数用户的需求也主要是动态代理......
  • 动态规划--放置油桶
    题目:题目:#include<iostream>#include<cstdio>usingnamespacestd;intn,k,dp[1000005];intmain(){scanf("%d%d",&n,&k);for(inti=1;i<=k+1;i++)dp[i]=i+1;//dp[i]表示当n=i时的答案for(inti=k+2;i<=n;i++)......
  • 深度理解 Spring 动态数据源切换是如何实现的
    更新(不是必读,只为了帮助读者更好的理解执行过程)2022-11-16结合事务TransactionInterceptor的执行,剖析数据源是如何切换的详细分析为什么,切面要设置@Order(-9999)属性针对点一回答如下在SpringBoot项目启动的时候,会去扫描所有配置类,生成一个个的Bean,被@Transaction标记的......