总结016—dp及近两周的感悟

下面来简单介绍一下这两周看的比较好的部分题和对在codeforces上的两场比赛(Div.3,Div.4)的心得体会

1、方格取数

题意:从左上到右下去两条路径,使得取得的数之和最大(同时需要注意的是N<=9,所以四层循环不会超时)

题解:我们考虑两个人同时走,就相当于数字三角形。状态转移方程为:f[i][j][k][l]=max(f[i-1][j][k-1][l],f[i-1][j][k][l-1],f[i][j-1][k-1][l],f[i][j-1][k][l-1])+a[i][j]+a[k][l];

for(int i=1;i<=n;i++)
{
	for(int j=1;j<=n;j++)
	{
		for(int k=1;k<=n;k++)
		{
			for(int l=1;l<=n;l++)
			{
				f[i][j][k][l]=max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k-1][l],f[i][j-1][k][l-1]))+a[i][j]+a[k][l];
				if(i==k&&l==j)f[i][j][k][l]-=a[i][j];
			}
		}
	}
}

 2、Charlie's Change

题意:去买东西时有不同面值和数量的零钱,求出最大的硬币数量

题解:转化成完全背包问题外加上一个记录数目的数组(能选小的绝不选大的)

3、​​​​​​Two Rounds

题意:一共有两轮,每一轮有N个任务数,共M个不应该为一轮的分配对数,随后M行,每行有两个类似的解决方案,类似的解决方案不应该分配到同一轮,如果有多个则随意输出两轮的解决方案,如果没有则输出IMPOSSIBLE

题解:dfs+背包(*重要*)

*对于某些理解不是很到位的题可以把答案复制下来,然后运行自己随意输入,判断自己的理解是否正确*

因为长时间也没在codeforces上打比赛的缘故吧,突然一打Div.3还真是挺突然的,AC出1题,怎么说呢,其实也不是很满意,状态也调整的也比较慢,读题也比较慢.。

在Div.4中(AC出3题)有一道Dfs类型的题目,当时看到时就想到用Dfs,但写着写着发现dfs怎么写,怎么递归,当时也懵住了,于是就在main函数中内的两层for循环内加入了5个一层一层的if语句,虽然最终也AC出来,但是也体现出自己还是对dfs和bfs不熟悉,还得在洛谷和codeforces上看看搜索类的题。

突然一想,其实这两周复习光背背就行,也在复习时对很多的知识进行了理解,考完才感觉浪费了时间,真的是对于一些比较水的课背背就行了,而不需要死扣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值