2020.7.16集训总结

今天学习内容:1.dp背包问题

(1)01背包:状态方程(二维):
dp[i][j]=max(dp[i-1][j],dp[i-1][j-m[i]]+v[i]) (j>=m[i])
方程中dp[i-1]可删去简化变成一维,dp[j]=max(dp[j],dp[j-m[i]]+v[i])。
注意:二维方程需要if判断条件,但是一维不需要,
(2)完全背包:就是拿物品次数变成无数次。
状态方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-k*m[i]]+k *v[i]) (0<=k * m[i]<=j)

(3)多重背包:有限次的拿物品。
状态方程:dp[i][v] = max{dp[i - 1][v - k * c[i]] + w[i] | 0 <=k <= n[i]}

附上今天刷的一道题 HDU - 1171
题目大意,有n个价值物品,每个价值物品可能有1个以上,要求平均分成两份,第一份大于等于第二份。
这道题两种方法:第一种,均分01背包,第二种方法多重背包。
我用的均分01背包。
大概思路:所有价值总和除2就是一分最小价值(第二份)
直接01背包完成

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int t,m[255555],number,num,sum,dp[255555];
int max(int x,int y){
	if(x>y)
		return x;
	else
		return y;
}
int main(){
	while(~scanf("%d",&t)){
		if(t<0)
			break;
		memset(m,0,sizeof(m));
		memset(dp,0,sizeof(dp));
		sum=0;
		int k=1;
		for(int i=1;i<=t;i++){
			scanf("%d%d",&num,&number);
			m[k]=num;
			sum+=m[k++]*number;
			for(int j=2;j<=number;j++)
				m[k++]=num;
		}
		int n=sum/2;
		for(int j=1;j<k;j++)
			for(int i=0;i<=n;i++)
				if(i>=m[j])
					dp[i]=max(dp[i],dp[i-m[j]]+m[j]);
		printf("%d %d\n",sum-dp[n],dp[n]);
	}
	return 0;
}

有点坑的就是数组范围是5050100。。我开的5005一直超时。。。很神奇居然不是runtime。
今天还学习了搜索,DBFS这个就是2个BFS双向比一个BFS时间快,空间小。
还有看懂了A算法,实现就是有点难,用它解决八数码问题。
A
算法灵魂 F(x)=H(x)+G(x)
H(x)就是估算距离。有很多估算思想我就会一个M开头的
G(x)就是自己设定距离一般一个方块10,对角线14(约等于),数值看自己爱好。
每次找路是找F(x)最小值,所以它的缺点就很明显如果有多个F(x)最小值寻路,那么他不一定找到的是最短路。
然后A=算法升级版就是IDA算法,就是限制层数的A算法,看博客说极其优化,简单的公式。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: darkbzoj.cc是一个在线的题库和程序设计平台。与其他常见的程序设计平台不同的是,darkbzoj.cc的难度较高,所以它更适合经验更为丰富的用户。平台集成了各种不同难度的编程挑战题目,包括算法、数学、图形、字符串、数据结构等领域,满足不同技能层级的编程爱好者需求。 在darkbzoj.cc的题库中,有许多有趣的题目,涵盖了各种算法和数据结构,如并查集、线段树、动态规划等。此外,该平台还可以服务于程序设计比赛,推广和发展技能水平。 因此,darkbzoj.cc不仅是一个有趣的编程平台,而且也是学习和提高编程技能的理想场所,值得更多编程爱好者的尝试和探索。 ### 回答2: darkbzoj.cc是一个在线编程题库,也可以称为黑暗集训队题库。这个网站的题目大部分都是计算机竞赛的经典题目,难度较高,主要面向ACM/ICPC竞赛选手、OI/NOI选手、算法研究人员以及对算法挑战感兴趣的程序员们。 这个网站包含了很多题目,其中很多都是经典的算法题目,如最短路、最小生成树、网络流、计算几何、字符串算法等。对于那些对这些经典算法感兴趣的人来说,这个网站是一个很好的学习资源。 除此之外,这个网站还提供了一些更加高级的算法题目,需要一些高级的知识来解决。因此,对于对于那些挑战自己的人来说,这个网站也是一个很好的选择。 总之,darkbzoj.cc提供了一个充满挑战的编程题库,为计算机科学专业的学生们以及程序员们提供了一个测试和提高他们编程技能的地方。 ### 回答3: Darkbzoj.cc是一个在线的算法竞赛平台,旨在为全球的程序员提供优秀的学习资源和挑战比赛。通过Darkbzoj.cc,用户可以学习算法、优化程序、提高编程技巧,并在比赛中体验竞技的乐趣。 Darkbzoj.cc提供了丰富的学习资料和编程题目,包括数据结构、算法基础、动态规划、图论以及数论等方面的知识。该平台具有良好的用户体验,界面清晰简洁,让用户更加专注于学习和编程。 此外,Darkbzoj.cc还提供了许多高质量的比赛,并与全球知名的算法竞赛平台进行合作,包括Codeforces、Atcoder、Topcoder等。这些比赛不仅能够提供良好的竞赛体验,还能够激励用户学习和提高自己的编程技能。 总之,Darkbzoj.cc是一个优秀的算法竞赛平台,不仅提供了优质的学习资源和编程题目,还能够为用户提供竞赛切磋的机会,是全球程序员必备的学习和竞赛平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值