首页 > 其他分享 >第一周寒假acm训练总结

第一周寒假acm训练总结

时间:2024-01-28 13:23:10浏览次数:24  
标签:背包 第一周 int acm 寒假 砝码 1010 放入 这道题

本周训练让我切身体会了算法的魅力和学习需求,还有很多的算法需要我去掌握。
这是其中我印象较为深刻的一道题
P1048 [NOIP2005 普及组] 采药
我的理解是,将草药一个一个放入背包中,如果放入时超过了限重,则最佳方案为不放入,即dp[i-1][j]=dp[i][j];反之则判断放入的方案和不放入的方案哪个价值更高。
应该是这样吧awa。
AC代码如下

#include <bits/stdc++.h>

using namespace std;

int main(){

int t,m,a[1010],b[1010],c[1010][1010];
cin>>t>>m;
for(int i=1; i<=m; i++){
	cin>>a[i]>>b[i];
}

for(int i=1; i<=m; i++){
	for(int j=1; j<=t; j++){
		if(a[i]>j)
			c[i][j]=c[i-1][j];
	else
		c[i][j]=max(c[i-1][j],c[i-1][j-a[i]]+b[i]);
}
}

cout<<c[m][t];
return 0;

}
说实话,这还是我第一次真正学习背包问题。在经过基础的学习之后,我对背包问题也是有了一个大致的认知。
不久后,我再次遇到了这类问题。
P8742 [蓝桥杯2021 省 AB] 砝码称重
这道题要思考的更多,多个砝码可以相加相减,但核心依然是背包问题。
先从一个砝码入手,再开始加减,就是把加号换成减号,并注意绝对值就行了。
AC代码如下

#include<bits/stdc++.h>

using namespace std;
int n,a[110],sum,ans=0,d[110][100010];

int main() {

cin>>n;
for(int i=1; i<=n; i++){
	cin>>a[i];
	sum+=a[i];
}

for(int i=1; i<=n; i++){
	for(int j=sum;j ;j--){
		if(j==a[i])
			d[i][j]=1;
		else if(d[i-1][j]==1)
			d[i][j]=1;
		else if(d[i-1][j+a[i]]==1)
			d[i][j]=1;
		else if(d[i-1][abs(j-a[i])]==1)
			d[i][j]=1;
	}
}
for(int i=1; i<=sum; i++){
	if(d[n][i])
		ans++;
}

printf("%d",ans);
return 0;

}
这道题的难度明显比上一题高,我也是费了九牛二虎之力才做出这道题。虽然过程较为艰难,但解出题的感觉确实很妙啊。
看着上面那些大佬解题如喝水,我是既震惊又羡慕,看来还得多多练习啊。
我目前也有许多不足,如面对较大的数据无法处理导致RE,比赛状态进入较慢,算法储量过小等问题都成为了我目前急需解决的问题,希望在接下来的学习中能更上一层楼吧。

标签:背包,第一周,int,acm,寒假,砝码,1010,放入,这道题
From: https://www.cnblogs.com/24784jki090/p/17991882

相关文章

  • 寒假生活(16)
    今天继续面向对象编程的进程,因为这是学会利用python的基础,所以多学一些。构造函数和析构函数构造函数(Constructor)是在创建一个类的实例时自动调用的方法。在Python中,构造函数的名称固定为__init__,它用于初始化对象的属性。例如,下面的代码定义了一个具有两个属性的类,并在构造......
  • 寒假生活(17)
    今天继续python的学习,今天的主要内容是连接数据库操作,我学习了3种常见的数据库的连接方式并一一实验,现将模板整理出来。当使用Python进行数据库访问时,通常会使用数据库接口模块(DatabaseInterfaceModule)来连接和操作数据库。Python标准库中包含了一些用于不同类型数据库访问的模......
  • 寒假生活(15)
    今天继续python的学习,这几周把基本的知识点大体看完了,现在开始学习一些实际的,今天主要是面向对象编程。类和对象在Python中,通过定义类(class)来实现面向对象编程。一个类定义了一类对象的属性和方法,而一个具体的对象则是该类的一个实例。定义一个类时,需要使用关键字class,然后在......
  • 第一周培训crypto相关补充(Base家族-八卦图与二进制-md5)
    一.Base家族及其特点(1)Base161.编码后的字符只会在(0-9,A-F共16个)中出现。2.编码后的字符为源字符的两倍,4个bit一组,而1字节8bit,所以base16不可能用等号填充。(2)Base321.编码后的字符只会由大写字母(A-Z)和数字23456732个字符组成。2.因为base325bit为一组,所以编码长......
  • 2024.1.27寒假每日总结18
    算法题:2861.最大合金数-力扣(LeetCode)git学习Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是LinusTorvalds为了帮助管理Linux内核开发而......
  • 1.2、7寒假每日总结18
    git学习Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 ......
  • 第一周周报
    训练赛:2024蓝桥杯模拟赛1(div1)题解SMU-XCPC题解SMU2024winterround1题解题单牛客题解自主训练cf题解cf题解cf题解cf题解cf题解......
  • 寒假生活指导19
    packagesrc.main.selenium;importorg.openqa.selenium.By;importorg.openqa.selenium.JavascriptExecutor;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.edge.EdgeDriver;importorg.openqa.selenium.e......
  • 寒假训练2024/1/26
    2024,1,26今天做石子合并的题比较多贴一个模板 for(intlen=2;len<=n;len++){ for(inti=1,j;(j=i+len-1)<=n;i++){for(intk=i;k<j;k++){if(dp[i][j]>dp[i][k]+dp[k+1][j]+pre[j]-pre[i-1]){......
  • Archlinux pacman 滚挂的惨痛教训
    本文以BY-NC-SA协议发布。省流不要将/var/cache/pacman/pkg及它的任一父目录设为符号链接。完整版我真傻,真的。我是单知道/var/cache会占很大空间导致滚挂,不知道/var/cache不能设为符号链接。在上次滚挂后我设置了符号链接,然后一个月不到就又挂了,救不回来的那种。翻......