裴蜀定理+dp两则

一.Codeforces Round #290 (Div. 2) D. Fox And Jumping
题目大意:

给你 n n n个卡片,第 i i i个卡片能够让你可以跨步为 l i l_i li,选择的花费的是 c i c_i ci.
然后你现在在坐标 0 0 0点,问你最小的花费使得你能够到达格子里的每个坐标。

题目思路:

就是选择一个子集 S S S满足 g c d ( l i ) = 1 , i ∈ S gcd(l_i)=1,i \in S gcd(li)=1,iS 使得 得到最小 ∑ S c i \sum_{S}c_i Sci.

可以利用类似同于最短路的思路做。令 d p [ i ] dp[i] dp[i]为当前选择的子集 g c d = i gcd=i gcd=i的最小花费。再用一个桶装当前可能 g c d gcd gcd.每次新增一个物品时与所有可能的 g c d gcd gcd求个 g c d gcd gcd即可然后刷表 d p dp dp即可。

二. 牛客练习赛52-D-烹饪
题目大意:

给你n个数 a i a_i ai,有多少种选择方法使得选出的数的gcd=1.
n , a i ≤ 3000 n,a_i \leq 3000 n,ai3000

题目思路:

这题比上面那题还容易点,可以直接令 d p [ i ] [ j ] dp[i][j] dp[i][j]为前 i i i个数,且选择出的子集 g c d = = j gcd==j gcd==j的方案。第 i i i个数选或不选计数转移即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值