No.1 DP 背包 POJ 1837 Balance

基于Java17、SpringBoot、vue3、antdv-next、uniapp等主流技术构建的全场景极速开发平台 MDP内置3个web端、1个移动端 重点解决用户中心、开发者平台、管理后台3个应 MDP-主数据平台,后端项目。专注于单点登录解决方案。内置用户中心、开发者平台、管理后台3个应用。包含:单点登录、Oauth2 登录、用户身份管理、应用申请、应用接入、主数据维护、主数据订阅、主数据广播、应用接口调用、接口管理管理和查看、系统配置等功能。 立即下载

Balance
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 4100 Accepted: 2369

Description

Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance. 
It orders two arms of negligible weight and each arm's length is 15. Some hooks are attached to these arms and Gigel wants to hang up some weights from his collection of G weights (1 <= G <= 20) knowing that these weights have distinct values in the range 1..25. Gigel may droop any weight of any hook but he is forced to use all the weights. 
Finally, Gigel managed to balance the device using the experience he gained at the National Olympiad in Informatics. Now he would like to know in how many ways the device can be balanced. 

Knowing the repartition of the hooks and the set of the weights write a program that calculates the number of possibilities to balance the device. 
It is guaranteed that will exist at least one solution for each test case at the evaluation. 

Input

The input has the following structure: 
• the first line contains the number C (2 <= C <= 20) and the number G (2 <= G <= 20); 
• the next line contains C integer numbers (these numbers are also distinct and sorted in ascending order) in the range -15..15 representing the repartition of the hooks; each number represents the position relative to the center of the balance on the X axis (when no weights are attached the device is balanced and lined up to the X axis; the absolute value of the distances represents the distance between the hook and the balance center and the sign of the numbers determines the arm of the balance to which the hook is attached: '-' for the left arm and '+' for the right arm); 
• on the next line there are G natural, distinct and sorted in ascending order numbers in the range 1..25 representing the weights' values. 

Output

The output contains the number M representing the number of possibilities to poise the balance.

Sample Input

2 4	
-2 3 
3 4 5 8

Sample Output

2

Source

发现书看多了还是不行,要多做题!!!

DP的边界太重要了,一开开始把V_MAX值估计小了,一直WA, 仔细估算改成7500后就AC

 

(1)很早之前写的一个版本,用了递归,其实DP最好还是不要用递归

#include <iostream>
#define C_MAX 20
#define G_MAX 20
#define V_MAX 7500
using namespace std;

static int t1[C_MAX + 1];
static int t2[G_MAX + 1];

static int m[G_MAX + 1][C_MAX + 1];
static int v[G_MAX + 1][2 * V_MAX + 1];

int r_c = 0;
int r_v = 0;

int test(int num, int value) //DP主程序,采用备忘录
{
     int tempvalue = value;
     if(value < 0)
          tempvalue = V_MAX - value;
      if(v[num][tempvalue] != -1)
           return v[num][tempvalue];
      else if(num == 0 && value != 0)
      {
            v[num][tempvalue] = 0;
            return 0;
      }
      else
      {
            int total = 0;
            for(int i = 1; i <= r_c; i++)
            {
                  total += test(num - 1, value + m[r_v - num + 1][i]); //求子问题
            }
            v[num][tempvalue] = total; //备忘
            return total;
      }
}
int main()
{
     cin>>r_c>>r_v;

     //
     for(int i1 = 1; i1 <= r_c; i1++)
     {
          cin>>t1[i1];
     }
     for(int i2 = 1; i2 <= r_v; i2++)
     {
          cin>>t2[i2];
     }
     for(int i3 = 1; i3 <= r_v; i3++)
     {
          for(int i4 = 1; i4 <= r_c; i4++)
          {
               m[i3][i4] = t2[i3] * t1[i4];
          }
     }
     for(int i = 0; i <= G_MAX; i++)
     {
          for(int j = 0; j <= 2 * V_MAX; j++)
          {
               v[i][j] = -1;
          }
     }
     v[0][0] = 1;
     test(r_v, 0);
     cout<<v[r_v][0]<<endl; //输出
     return 0;
}

 

(2)非递归版本

/*

典型的覆盖型背包问题,有条件可知,总的力矩的范围是-7500 ~ 7500,为了方便处理,总体迁移7500,变成1 ~15000

然后利用背包的解法依次处理所有砝码以及放置的位置

*/

#include <iostream>
#define MAX_N 15010
#define MAX_H 20
#define MAX_W 20
using namespace std;


//背包的记录数组,利用二维滚动 can[][i]表示到当前砝码可以让总力矩达到i的方案总数

int can[2][MAX_N + 1];

//输入
int hook[MAX_H + 1], weight[MAX_W + 1];
int h_n, w_n;

int main()
{
    int i, j, w;

    //读取输入

    scanf("%d%d", &h_n, &w_n);
    for(i = 0; i < h_n; i++) scanf("%d", &hook[i]);
    for(i = 0; i < w_n; i++) scanf("%d", &weight[i]);

    //p用来指示当前滚动数组的第一维位置   

    int p = 0;

    memset(can, 0, sizeof(can));

    //背包起始状态,处于平衡状态
    can[0][7500] = 1;

    //遍历砝码

    for(i = 0; i < w_n; i++)
    {

        //遍历当前砝码可以防止的位置
        for(j = 0; j < h_n; j++)
        {

            //当前砝码防止在当前位置可以增加的力矩值
            int val = hook[j] * weight[i];

            //遍历当前背包可达状态
            for(w = 0; w <= MAX_N; w++)
            {
                if(can[p][w] != 0)
                    can[(p + 1) % 2][w + val] += can[p][w];
            }
        }
        memset(can[p], 0, sizeof(can[p]));

        //最后一个砝码防止完毕,输出结果,结果是平衡状态的可达途径总数
        if(i == w_n - 1) printf("%d/n", can[(p + 1) % 2][7500]);
        p = (p + 1) % 2;
    }
    return 0;
}

 

 

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx 科技中介服务机构想要提升服务效率,需要哪些数智工具支持? 立即下载

相关推荐

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

GOOGLE的一道笔试题—求给定连通无环无向图可以生成的最小高度树

/*最近看到一道谷歌笔试题,“已知一颗无向无环连通图T的所有顶点和边的信息,现需要将其转换为一棵树,要求树的深度最小,请设计一个算法找到所有满足要求的树的根结点,并分析时空复杂度(描述算法即可,无需代码)”其实就是给定一个无向连通图,求以哪些顶点为根可以得到深度最小的树,思路比较简单,主要有两个步骤:(1)首先选取1号结点作为树根,进行一遍DFS,在DFS时计算每个节点

bobten2008的专栏 3707

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

POJ 1952 BUY LOW BUY LOWER 【DP】最长降序子序列及其计数问题

 BUY LOW, BUY LOWERTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 4981 Accepted: 1663DescriptionThe advice to "buy low" is half the formula to success

bobten2008的专栏 2270

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

ad23新版Geber导出-官方教程(22.11版本后)

AD23新版本geber文件导出(含官方教程)-22.11之后的版本均可用此教程

安和的博客 3万+

POJ 1191棋盘分割

 棋盘分割Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 5827 Accepted: 2092>>Description将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次

bobten2008的专栏 2233

实现自己的AI视频监控系统-第一章-视频拉流与解码4(重点)

使用本章节代码请引用此优快云链接,尊重知识、尊重他人劳动。这一小节将正式进入代码实现部分。我们会结合实际业务需要和拉流解码流程实现一个灵活、轻便、易用的视频拉流解码模块,支持多路视频拉流解码且可以动态更新更新内部参数。在开始设计之初,我们首先考虑的是使用大家所熟知的 **OpenCV(cv2.VideoCapture)**来实现拉流和解码功能。它的 API 简单直接,几行代码就能实现从网络流中读取帧,对于快速原型验证来说非常方便。然而,在经过深入的调研和测试后,我们发现 OpenCV 在处理多路视频流、追

soulproficiency的博客 2268

POJ 1085 Triangle War

Triangle WarTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1465 Accepted: 582DescriptionTriangle War is a two-player game played on the following trian

bobten2008的专栏 2097

西门子精致面板TP1200 历史数据(历史数据、审计追踪) 移存到网络路径

TP1200 审计追踪

zhang080602的博客 5772

MCAL配置之CAN模块及源码分析

该文章详细解析了Autosar中MCAL配置里的CAN模块,详细分析了重要的配置选项,并对CAN的发送和接收函数进行了剖析。

u013624141的博客 1420

POJ 1934 Trip LCA及其所有不重复的串

 TripTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1629 Accepted: 372DescriptionAlice and Bob want to go on holiday. Each of them has planned a route,

bobten2008的专栏 2027

华为OD机试真题 新系统2026-04-08 Python&JS 实现【直捣黄龙】

小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个哨兵警戒以自己为中心的9宫格,一旦被哨兵发现则行动失败。

MISAYAONE的博客 589

POJ 1661 Help Jimmy

Help JimmyTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 5993 Accepted: 1840Description"Help Jimmy" 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度

bobten2008的专栏 1842

使用CNN/ResNet实现自动调制识别(RML2018.01a)

本文基于RML2018.01a大型数据集,给出CNN及其变体ResNet的信号识别的实现方式(附代码) 目录一、CNN的代码实现1.1 导入包1.2 数据读取及数据集划分1.3 构建CNN模型1.4 模型训练1.5 测试及模型可视化二、ResNet的代码实现 RML2018.01a数据集信息如下: 数据集来源 Over-the-Air Deep Learning Based Radio Signal Classification 调制类型 19种数字调制方式: 32PSK, 16APSK,

QAQIknow的博客 1万+

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

1946

POJ 1732 Phone numbers

 Phone numbersTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 2456 Accepted: 852 Special JudgeDescriptionIn the present world you frequently meet a

bobten2008的专栏 1715

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

POJ 2901 Hotel

 http://acm.pku.edu.cn/JudgeOnline/problem?id=2901HotelTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 561 Accepted: 156DescriptionZebel, the tour co

bobten2008的专栏 1607

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

POJ 1112 Team Them Up

Team Them Up!Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 3404 Accepted: 901 Special JudgeDescriptionYour task is to divide a number of persons i

bobten2008的专栏 1558

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

POJ 2030 The Secret Number

 The Secret NumberTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 1704 Accepted: 564DescriptionYour job is to find out the secret number hidden in a mat

bobten2008的专栏 1375

POJ 1874 Trade on Verweggistan

Trade on VerweggistanTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 1238 Accepted: 355DescriptionSince the days of Peter Stuyvesant and Abel Tasman, Du

bobten2008的专栏 1301

POJ 1692 Crossed Matchings

 Crossed MatchingsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 1578 Accepted: 1020DescriptionThere are two rows of positive integer numbers. We can d

bobten2008的专栏 1217

POJ 1964 & 1494

 City GameTime Limit: 3000MS Memory Limit: 30000KTotal Submissions: 3095 Accepted: 1181DescriptionBob is a strategy game programming specialist. In his new city b

bobten2008的专栏 1213

POJ 2019 Cornfields

 CornfieldsTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 3096 Accepted: 1459DescriptionFJ has decided to grow his own corn hybrid in order to help the

bobten2008的专栏 1130

POJ 1505 Copying Books

 Copying BooksTime Limit: 3000MS Memory Limit: 10000KTotal Submissions: 4431 Accepted: 1256DescriptionBefore the invention of book-printing, it was very hard to m

bobten2008的专栏 1102
下一篇: POJ 1861 Networks
bobten2008
博客等级 码龄18年 153粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值