【CSP模拟】小凯的疑惑(DP)


首先,这道题正解的思路是从subtask2而得来的,所以先讲一下subtask2的做法。
因为保证答案不超过long long,所以直接求最大权独立集即可:dp[u][0]表示u点一定不能取的答案,dp[u][1]表示u点对儿子没有限制的答案。
\(dp[u][0]=max(dp[v][0],dp[v][1])\)
\(dp[u][1]=max(dp[u][1],val[u]*\prod dp[v][0])\)
直接跑DP即可。
而正解是怎么做的呢?
想到乘法,可以将其转化为对数,每次乘法就相当于对数相加,这个就可以计算出怎样选取这个最大权独立集,再跑一遍深搜统计答案即可。
//这里的dp的都是对数,所以只用相加即可
void dfs(int u,int fa)
{
dp[u][0]=dp[u][1]=0;
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(v!=fa)
{
dfs(v,u);
dp[u][0]+=max(dp[v][0],dp[v][1]);
dp[u][1]+=dp[v][0];
}
}
dp[u][1]+=logv[u];
}
\\统计答案的时候通过已经求出来的dp来作决策
\\如果u本身被选,肯定儿子不可选
\\如果u本身没有被选,判断儿子选更优还是不选更优。
\\选的话要乘上val
long long dfs1(int u,int fa,int yes)
{
long long ans=1;
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(v!=fa)
{
if(yes)
{
ans=(ans*dfs1(v,u,0))%mod;
}else{
if(dp[v][0]>dp[v][1])
{
ans=(ans*dfs1(v,u,0))%mod;
}else{
ans=(ans*dfs1(v,u,1))%mod;
}
}
}
}
if(yes)
{
ans=(ans*val[u])%mod;
}
return ans;
}
if(dp[1][0]>dp[1][1])
{
printf("%lld\n",dfs1(1,-1,0));
}else{
printf("%lld\n",dfs1(1,-1,1));
}
【CSP模拟】小凯的疑惑(DP)的更多相关文章
- 洛谷 P3951 小凯的疑惑 找规律
目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 思路 证明 AC代码 include<bits/stdc++.h> 题面 ...
- 【比赛】NOIP2017 小凯的疑惑
找规律:ans=a*b-a-b 证明:(可见 体系知识) gcd(A, B) = 1 → lcm(A, B) = AB 剩余类,把所有整数划分成m个等价类,每个等价类由相互同余的整数组成 任何数分成m ...
- Luogu [P3951] 小凯的疑惑
题目详见:[P3951]小凯的疑惑 首先说明:此题为一道提高组的题.但其实代码并没有提高组的水平.主要考的是我们的推断能力,以及看到题后的分析能力. 分析如下: 证明当k>ab-a-b时,小凯可 ...
- NOIP 2017 小凯的疑惑
# NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...
- luogu 3951 小凯的疑惑
noip2017 D1T1 小凯的疑惑 某zz选手没有看出这道结论题,同时写出了exgcd却不会用,只能打一个哈希表骗了30分 题目大意: 两个互质的正整数a和b,求一个最小的正整数使这个数无法表示为 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- P3951 小凯的疑惑
P3951 小凯的疑惑 题解 题意也就是求解不能用 ax+by 表示的最大数 ans(a,b,x,y,都是正整数) 给定 a ( =7 ) , b ( =3 ) 我们可以把数轴非负半轴上的数按照a的 ...
- luoguP3951 小凯的疑惑/P2662 牛场围栏
其实就是当年sxy给我讲的墨墨的等式,只是当时比较菜听得似懂非懂. 小凯的疑惑 去年noipday1t1,当时随便猜了个结论结果猜对了,现在瞎证一下,答案是a*b-a-b. 设a为a,b中较小的一个, ...
- 题解 P3951 小凯的疑惑
P3951 小凯的疑惑 数论极菜的小萌新我刚看这题时看不懂exgcd做法的题解,后来在网上找到了一篇博客,感觉代码和推导都更加清新易懂,于是在它的基础上写了题解qwq 分析 两数互质,且有无限个,想到 ...
- 洛谷 P3951 NOIP 2017 小凯的疑惑
洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...
随机推荐
- Mysql历史版本下载地址
Mysql历史版本下载地址:http://downloads.mysql.com/archives/community/
- PHP回顾(2)
print_r()打印输出原格式,就加上标签<pre>.例子:echo '<pre>'; print_r($arr); echo '<pre>'; 添加数组的时候, ...
- web+大文件上传
总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...
- BZOJ 1406: [AHOI2007]密码箱 exgcd+唯一分解定理
推出来了一个解法,但是感觉复杂度十分玄学,没想到秒过~ Code: #include <bits/stdc++.h> #define ll long long #define N 5000 ...
- 「SNOI2017」礼物
题目链接:Click here Solution: 设\(f(x)\)代表第\(x\)个人送的礼物的数量,\(s(x)\)代表\(f(x)\)的前缀和,即: \[ f(x)=s(x-1)+x^k\\ ...
- delphi通过url下载文件
procedure TfrmEngineerImport.btnDownloadClick(Sender: TObject);var vsql, SourceFile, DestFile, filen ...
- Hibernate和Mybatis框架的对比
Hibernate:是一个标准的ORM(对象关系映射)框架.入门门槛较高,不需要程序员写sql,sql语句自动生成.但是就造成对sql语句进行优化.修改比较困难.应用场景:适用于需求变化不多的中小型项 ...
- Google protocol buff使用
Protocol Buffer使用简介 我们项目中使用protocol buffer来进行服务器和客户端的消息交互,服务器使用C++,所以本文主要描述protocol buffer C++方面的使用, ...
- DB 分库分表(4):多数据源的事务处理
系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题.总体上看,目前对于一个分布式系统的事务处理有三种方式:分布式事务.基 ...
- ast.literal_eval(转)
eval函数在Python中做数据类型的转换还是很有用的.它的作用就是把数据还原成它本身或者是能够转化成的数据类型.那么eval和ast.literal_val()的区别是什么呢?本文将大家介绍关于P ...