hdu3535

无人机通信电台--XBee-PRO 900HP (S3B) XBee PRO S3B也称为XBee-900HP无线模块,它是一款工作在频段900~928MHz之间,基于FHSS跳频技术的远距离无线数传电台核心模块。常用型号如下: 类别 型号 开发套件 XKB9-DMT-UHP XBee-PRO 900HP (S3B) DigiMesh模块,200Kbps,软天线 XBP9B-DMWT-002 XBee-PRO 900HP (S3B)... 阅读详情
算了,剩下我找不出错了,先贴上错的代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<stack>
#include<cmath>
#include<map>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
#define bug1 cout<<"bug1"<<endl;
#define bug2 cout<<"bug2"<<endl;
#define bug3 cout<<"bug3"<<endl;
using namespace std;
const int maxn=105;
struct Node{
    int c,v;
};
//vector<Node>a[maxn];
Node a[maxn][maxn];
int siz[maxn];
int type[maxn];
int dp[maxn][maxn];
void init(){
    memset(dp,0,sizeof(dp));
    memset(a,0,sizeof(a));
    memset(type,0,sizeof(type));
    memset(siz,0,sizeof(siz));
}
int main(){
    int n,t;
    while(~scanf("%d%d",&n,&t)){
        init();
        for(int i=1;i<=n;++i){
            int m;
            scanf("%d%d",&m,&type[i]);
            for(int j=1;j<=m;++j){
                int c,v;
                scanf("%d%d",&c,&v);
                a[i][j].c=c;a[i][j].v=v;
            }
            siz[i]=m;
        }
        /*
        for(int i=1;i<=n;++i){
                cout<<"type"<<type[i]<<' ';
            for(int j=1;j<=siz[i];++j){
                cout<<a[i][j].c<<' '<<a[i][j].v<<' ';
            }
            cout<<endl;
        }*/
        for(int i=1;i<=n;++i){
            if(type[i]==0){//at least one
                for(int k=0;k<=t;++k)
                    dp[i][k]=-inf;
                for(int j=1;j<=siz[i];++j){
                    for(int k=t;k>=a[i][j].c;k--){
                        dp[i][k]=max(dp[i][k],max(dp[i][k-a[i][j].c]+a[i][j].v,dp[i-1][k-a[i][j].c]+a[i][j].v));
                    }
                }
            }
            else if(type[i]==1){//at most one
                for(int k=0;k<=t;++k)
                    dp[i][k]=dp[i-1][k];
                for(int j=1;j<=siz[i];++j){
                    for(int k=t;k>=a[i][j].c;k--){
                        if(k>=a[i][j].c)
                        dp[i][k]=max(dp[i][k],dp[i-1][k-a[i][j].c]+a[i][j].v);//貌似在这种情况下,不用说使得for的循环方向变化也可以得到正确答案

                    }
                }

                /*
                for(int k=t;k>=0;k--){
                    for(int j=1;j<=siz[i];++j){
                        if(k>=a[i][j].c)
                        dp[i][k]=max(dp[i][k],max(dp[i-1][k-a[i][j].c]+a[i][j].v,dp[i-1][k]));
                    }
                }*/
            }
            else {
                for(int k=0;k<=t;++k)//自己的这些地方的k不是从0开始,而是从1开始,导致我错了,查了那么久。
                    dp[i][k]=dp[i-1][k];
                for(int j=1;j<=siz[j];++j){
                    for(int k=t;k>=a[i][j].c;--k){
                        dp[i][k]=max(dp[i][k],max(dp[i][k-a[i][j].c]+a[i][j].v,dp[i-1][k-a[i][j].c]+a[i][j].v));
                    }
                }
            }
        }

        for(int i=1;i<=n;++i){
            for(int j=1;j<=t;++j){
                cout<<dp[i][j]<<' ';
            }
            cout<<'\n';
        }
        int ans=max(dp[n][t],-1);
        cout<<ans<<'\n';
    }


}

别人的代码

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=110;
const int inf=1<<29;
int n,t,m,dp[maxn][maxn],type[maxn],cnt[maxn],c[maxn][maxn],g[maxn][maxn];
int main()
{
    while(scanf("%d%d",&n,&t)!=EOF)
    {
	memset(cnt,0,sizeof(cnt));
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=n;i++)
	{
	    scanf("%d%d",&m,&type[i]);
	    for(int j=0;j<m;j++)
	    {
		scanf("%d%d",&c[i][cnt[i]],&g[i][cnt[i]]);
		cnt[i]++;
	    }
	}
	for(int i=1;i<=n;i++)
	{
	    if(type[i]==0)
	    {
		for(int j=0;j<=t;j++)
			dp[i][j]=-inf;
		for(int j=0;j<cnt[i];j++)
		    for(int k=t;k>=c[i][j];k--)
		    {
			dp[i][k]=max(dp[i][k],dp[i][k-c[i][j]]+g[i][j]);
			dp[i][k]=max(dp[i][k],dp[i-1][k-c[i][j]]+g[i][j]);
		    }
	    }
	    else if(type[i]==1)
	    {
		for(int j=0;j<=t;j++)
		    dp[i][j]=dp[i-1][j];
		for(int j=0;j<cnt[i];j++)
		    for(int k=t;k>=c[i][j];k--)
			dp[i][k]=max(dp[i][k],dp[i-1][k-c[i][j]]+g[i][j]);

	    }
	    else
	    {
		for(int j=0;j<=t;j++)
		    dp[i][j]=dp[i-1][j];
		for(int j=0;j<cnt[i];j++)
		    for(int k=t;k>=c[i][j];k--)
		    {
			dp[i][k]=max(dp[i][k],dp[i][k-c[i][j]]+g[i][j]);
			dp[i][k]=max(dp[i][k],dp[i-1][k-c[i][j]]+g[i][j]);
		    }
	    }
	}
	for(int i=1;i<=n;++i){
            for(int j=1;j<=t;++j){
                cout<<dp[i][j]<<' ';
            }
            cout<<'\n';
        }
	int ans=max(dp[n][t],-1);
	printf("%d\n",ans);

    }
    return 0;
}



2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析) 阅读详情

相关推荐

nRF52840 低功耗蓝牙开发指南:从硬件架构到物联网应用实战

本文深入解析nRF52840低功耗蓝牙芯片的硬件架构与开发实践,涵盖从开发环境搭建到BLE协议栈开发的详细指南。通过实战案例分享低功耗优化技巧,帮助开发者高效实现物联网应用,特别适合智能家居和工业场景。

d3e4f的博客 417

hdu 3535(分组背包+01背包)

hdu 3535 思路: 分为3种不同的情况: (1)fg = 0,至少一个的01背包,初始化所有值为-INF,表示不存在这种情况, 多选一个 dp[i][j] = dp[i][j-cur[i].ci[p]]+cur[i].gi[p]; 从上一次选一个 dp[i][j] = dp[i-1][j-cur[i].ci[p]]+cur[i].gi[p]; (2)fg = 1,至...

积少成多,水滴石穿 328

从零开始:使用Labelme完成图像语义分割标注全流程

本文详细介绍了如何使用Labelme工具完成图像语义分割标注的全流程,从环境安装、数据准备到核心标注操作,并重点讲解了如何将标注结果转换为PASCAL VOC等深度学习框架可用的标准数据集格式。文章还提供了关键的避坑指南和高效技巧,帮助初学者快速上手,高效产出高质量的标注数据。

weixin_29073241的博客 492

(HDU3535)AreYouBusy(混合背包)

题目链接:Problem - 3535 样例输入: 3 3 2 1 2 5 3 8 2 0 1 0 2 1 3 2 4 3 2 1 1 1 3 4 2 1 2 5 3 8 2 0 1 1 2 8 3 2 4 4 2 1 1 1 1 1 1 0 2 1 5 3 2 0 1 0 2 1 2 0 2 2 1 1 2 0 3 2 2 1 2 1 1 5 2 8 3 2 3 8 4 9 5 10 样例输出: 5 13 -1 -1 分析:这是一个混合背包问题,先分成若干组,再对每组内的物品进行限

AC__dream的博客 364

相机通用类之海康相机,软触发硬触发(飞拍),并输出halcon格式对象

如何显示图像:可以访问我文章开头的博客,通过编写相机通用类即可,程序中是有继承通用类,通过访问相机通用的获取图像数据,从而传输图像数据。具体可以查看相机通用类。整体过程其实比较简单,由于海康相机没有像一些品牌相机一样可以直接使用序列号开启相机,所以我们需要通过对相机信息进行索引,根据索引到的相机序列号来开启相机。

m0_51559565的博客 7620

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7283

hdu 3535(三种背包)

hdu 3535 题意: 有若干工作集合,每个集合有三种类型:集合中的工作至少完成一项;至多完成一项;随意完成。 每种工作都有花费的时间和完成后的幸福度。 问某时间内完成任务最大的幸福度。 思路: 显然题意中有三种背包,找到状态转移方程问题就很简单。 设dp[i, j],表示第i个集合,时间为j的最大幸福度。 集合从1开始,为了避免出现跨第一种集合完成任务的情况,将dp初始化为负无

AngelBeats! 781

模型参考自适应控制(MRAC):让PID参数动态优化

本文深入解析模型参考自适应控制(MRAC)技术,它通过实时调整PID参数,使控制系统能自动适应系统特性变化和外部干扰。文章详细介绍了MRAC的工作原理、数学基础,并提供了用C语言实现的实战代码示例,帮助工程师解决传统PID控制在非线性、时变系统中参数整定繁琐的难题。

tequila的博客 903

HDU-3535 AreYouBusy

分组背包+至少一个+最多一个+随意。 包之间的传值就是把上一组的背包复制到这组背包中,达到背包之间的联系。 http://acm.hdu.edu.cn/showproblem.php?pid=3535 AreYouBusy Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)T...

weixin_30484247的博客 206

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 61

一文吃透 SAP HANA JSON Document Store:从架构到实战的完整指南

本文详细介绍了SAP HANA的JSON Document Store功能,包括其定位、架构、典型场景以及具体使用方法。文章首先分析了半结构化数据场景下传统关系模型的局限性,说明Document Store如何通过集合(Collection)存储JSON文档来提供灵活性。随后详细阐述了启用方式、SQL语法、与Column Store的联动机制,并提供了大量可直接复用的实战案例。特别强调了Document Store作为HANA内建服务的优势,包括企业级一致性、备份恢复等能力。最后给出了数据类型处理和跨引擎协

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

hdu-3535背包好题-我对这道题的理解

不得不说,我这个菜鸡做这题真的是一脸懵,自己也没想明白,看别人的看明白了,但是有的部分我还是不明白,先说一下这道题为什么要开二维数组,我个人认为是这样的 为什么要开二维数组: S == 0(类型0)时,如果你想从这些物品中只取一个,那么转移方程是这样的 : dp[i][s] = max(dp[i][s],dp[i-1][s-cost[k]]+val[k]); 因为我们开始时候把dp[i][j](j 由 0-T)设置为负无穷,所以如果有这个方程至少可以保证一定会取一个,我想上面的方程是让每个地方都不再是-

zwynb_的博客 253

[深入研究4G/5G/6G专题-31]: 5G NR开机流程5.2 - UE Attach流程(Registeration Request/Accept/Complete)

目录前言:前置条件:第1章 5G NR UE attach流程(从UE log的视角看)1.0 NAS消息解析器1.1 消息交互流程1.2 UE Registeration Request消息(AMF->基站->UE)1.3 AMF Registeration Accept消息(AMF->基站->UE)1.4 UE Register complete消息(UE->基站->AMF)第2章 UE Register...............

文火冰糖(王文兵)的博客 7万+

HDU3535:分组背包

HDU3535 题解:分组背包问题好题目。 定义dp[i][j]为考虑到第i组,背包容量为j时的最大价值  s == 0,至少选一个。那么dp[i]初始化为-inf。dp[i][k]要从dp[i][k-weight]+val和dp[i-1][k-weight]+val转移过来。所以      dp[i][k] = max(dp[i][k],max(dp[i][k-weight]+val,dp...

FlyingJack 427

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hdu 3535 AreYouBusy

hdu   3535   AreYouBusy              题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535                                题目大意:小A要在一段时间内做一些工作,给出工作大类的数量n、总时间t。共有0、1、2三大类工作,0是老板要求至少做其中一项的、1是小A自己想做,但最多

slicer的技术交流栈 894

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hdu3535题解

hdu3535:http://acm.hdu.edu.cn/showproblem.php?pid=3535 该题是非常全面的一道分组背包问题。其实理解了最多一个的分组背包问题,解题起来也是很简单的。但是该题卡了我3天,真让人郁闷。就是因为一个case过不了,里面的时间ci可以为0!!!测试数据中竟然有0分钟这种事情!!!   题解:    #include<ios...

weixin_34138521的博客 160

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

(混合背包)HDU3535AreYouBusy

HDU3535AreYouBusy 题意&思路: 给时间T和工作集合n,有三种类型的集合:最少选一个工作,最多选一个工作,任选。问在T时间时完成工作的幸福度。 混合背包问题,有点难,看了题解才慢慢理解。 用dp[i][j]表示在第i个集合,时间为j的最大幸福度。 1、至少选一项。 将dp[i][j]全部赋值负无穷,这样就可以保证不会出现一个都不选的情况。 dp[i][j]=max{dp[i...

Z7784562的博客 259

分组背包——HDU 3535 AreYouBusy

HDU 3535 AreYouBusy 题目 http://acm.hdu.edu.cn/showproblem.php?pid=3535 学生xiaoA,对于一些职责,她必须至少选择一份工作;但对于某些事情,她最多只能选择一件事;而对于其他,她可以任意选择。一份工作需要时间,并给小小一些幸福点(这意味着她总是愿意做这些工作)。一项工作只能完成一次。需要选择最好的一组给她最大的幸福点工作。 这个题...

靡不有初,鲜克有终 409

hdu 3535 AreYouBusy(分组背包)(推荐)

hdu 3535 AreYouBusy分析感觉是一道好题目。 简单来说,题目就是先告诉你有n个组,以及总时间t,然后分别告诉你每个组有几个任务m以及这个组的类别s。每个任务有花费的时间c以及得到的快乐g。 对于类别s==1的任务,要求是至多选一个。也就是选一个或者不选。如果不选,即继承上一个组的结果,即for(int k=0; k<=T; k++) dp[

天道酬勤 422

hdu 3535 Areyoubusy (混合背包)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 有n个组的工作,有t的时间去做 对于组有三种类型 0至少选一个 1最多选一个 2随意,拿或者不拿,选其中多少都可以 每组每件事有花费的时间和收益 取尽量高的收益 思路: 三种情况: 0:至少选一个:dp[i][k]

智浩的博客 293

HDU 3535 混合背包

<br />http://acm.hdu.edu.cn/showproblem.php?pid=3535<br />#include<iostream> using namespace std; #define N 101 int dp[N][N]; int Max(int a,int b,int c) { if(a<b) a=b; if(a<c) a=c; return a; } int main(void) { int n,v; while(~scanf(

ME4546的专栏 1765

【题解】hdu3535 混合背包

题目链接 思路摘抄自大佬博客 首先如果存在最优解, 我们可以互换不同工作集合的处理顺序, 依然能得到最优解. 那么我们下面只需要处理每个单独的工作集合即可. 令dp[i][j]==x表示处理完前i组工作集,所花时间&amp;lt;=j时的快乐值为x。每得到一组工作就进行一次DP,所以dp[i]为第i组的结果。下面对三种情况进行讨论。 1.该集合内至少要选1件工作时. 要保证至少选1个第i类工作, ...

翻过这座山,他们就会听到你的故事 274

hdu3535 01&分组背包

hdu3535 稍微能理解一些了,至少取一个的分组背包。 http://www.cnblogs.com/wuyiqi/archive/2011/11/19/2255208.html 写hdu3033的那题 网上没有解释好一点的题解 ,这题题解比较多 #include #include #include using namespace std; int N,T,M,

Time flies 1299

HDU 3535 AreYouBusy(混合背包)

HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们。给你m和s,说明这个工作集合有m件事可以做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多只能做一件,s=2说明这m件事你可以做也可以不做)。再给你ci和gi代表你做这件事要用ci的时间,能获得gi的快乐值。求在T的时间内你能获得的最大快乐值。 分析:

code 2443

HDU 3535 AreYouBusy(混合背包+分组背包/至少取一件)

题目链接: HDU 3535 AreYouBusy 题意: 有n组物品,有三种组:①:组中物品必须买一个;②:组中物品最多买一个;③:组中物品随便买。每个物品只能买一次,问给m元钱能得到的最大价值是多少?如果无法得到最大价值,即有的组该买而无法买,那就输出-1. 分析: 混合背包和分组背包。 分两部分解决,一部分是分组背包,即每组中必须买一个;另一部分是至多买一个和随便买。然后最终只需要

ramay7 619

HDU 3535:AreYouBusy(分组背包)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题目翻译:给出N,T,代表有N组任务,给T时间长去做。 给出M,S,M代表该组中任务的个数,S代表该组任务的类型。 给出该组中M个任务所需要耗费的时间和所能收获的快乐值。 S = 0 .该组的任务至少选择一个做; S = 1. 该组的任务至多选择一个做; S  = 2.该组的

温姑娘的博客 398
上一篇: dfs,,类似树的想法
下一篇: kmp 公共子串出现3次
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值