Codeforces Round #131 (Div. 1)

Codeforces Round #131 (Div. 1)

A题:某个人要玩一个游戏,这个游戏有n关,他有三台电脑,每个游戏要在特定的某一台上玩,玩某一关游戏之前,他必须先打出另一些关的游戏,玩一关需要一小时,从一台电脑转移到另一台电脑也需要一个时间,分别是1->2,1小时,2->3,一小时,3->1,一小时,2->1,2小时,1->3,2小时,3->2,2小时。问打通关要几个小时?

解题思路:基本的贪心思路是,我们走到某一台电脑上时,就把这台能玩的都玩了,往下拓扑。我们可以发现走正向的环,每走一步最多花一小时,如果下一台电脑上没有,走到下下台也总共只要两小时,这跟走反向的一步是等价的,于是我们就一直 1->2->3->1 这样走。第一步走哪台枚举一下就好了。

代码:

B题:用i:0-9至少a[i]个i,能组合出长度不超过n的数有多少个。

解题思路:动态规划,dp[i][j]表示长度为i的,满足了0-i的限制条件的数有多少个,那么枚举k,从a[j]-n,当j!=0时,dp[i+k][j] = dp[i][j+1] * c[i+k][k],当j==0时,dp[i+k][j] = dp[i+k][j+1] * c[i+k-1][k](因为不能有前导零)。

代码:

C题:有一个n*n的矩阵,矩阵上有一些数,某人A从(1,1)出发,只能往右或者往下走,走到(n,n),把走过的点的和加起来,然后另一个人B从(n,n)走,只能往上或者往左走,走到(1,1),把走过的点的和加起来,A走过的点不能加,问两人能得出的总和最大是多少?

解题思路:首先,B从(n,n)往(1,1)走,跟B从(1,1)往(n,n)走,是等价的,那么就是两个人从(1,1)走到(n,n)总和最多是多少了,一开始想到的dp状态是把两个人的位置,用二维的坐标都表示到状态里面,但这样超时超内存啊。。然而两个人是同步走的,而且只能走往右或者往下,因此最多只能走2*n-2步吧,那么当我们知道走了多少步,而且知道在哪一行时,在那一列也就能算出来了,因此状态是dp[i][j][k]表示A在第i行,B在第j行,走了k步,和最大是多少,然后2*2,四种方向转移就好了。

代码:

比较水,D,E没做。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值