LINK:旗鼓相当的对手 考场上遇到这种简单的树形dp优化题目我真的不一定能写出来.. 虽然这道题思路很简单 设f[i][j]表示距i距离为j的点的个数 g[i][j]表示距i距离为j的点权和. 可以发现我们转枚举子树转移的时候可以得到某个点的答案.其实这道题让我们求的是以x为根的所有子树之间的答案. 这两个数组转移以深度转移 所以复杂度为n^2 长链刨分一下即可O(n). 但是我并不会长链刨分时的指针写法.所以考虑其他做法. 可以发现如果维护这两个数组的转移必然n^2 这个时候我们考虑直接给全…
P4715 [深基16.例1]淘汰赛 题目描述 有 2^n(n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节.我经知道各个国家的能力值,且都不相等.能力值高的国家和能力值低的国家踢比赛时高者获胜.1 号国家和 2 号国家踢一场比赛,胜者晋级.3 号国家和 4 号国家也踢一场,胜者晋级--晋级后的国家用相同的方法继续完成赛程,直到决出冠军.给出各个国家的能力值,请问亚军是哪个国家? 输入格式 无 输出格式 无 输入输出样例 输入 3 4 2 3 1 10 5 9 7 输出 1 思路1 把 nn 支…
P2240 [深基12.例1]部分背包问题 题目描述 阿里巴巴走进了装满宝藏的藏宝洞.藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v_i(1\le m_i,v_i \le 100)m**i,v**i(1≤m**i,v**i≤100).阿里巴巴有一个承重量为 T(T \le 1000)T(T≤1000) 的背包,但并没办法将全部的金币都装进去.他想装走尽可能多价值的金币.所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价…
题目:P4715 [深基16.例1]淘汰赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题因为数据范围不大,所以做法可以非常简单,使用一个vector加上pair就可以了: (实际上可以预处理2的次方数,但因为懒就直接用pow()了) 做法就是每次按顺序比较当前国家数的一半次,期间输掉的国家直接用erase()踢掉! 代码: #include <iostream> #include <cmath> #include <vector> using…
题目连接: P5706 [深基2.例8]再分肥宅水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我提交的: 1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main(){ 5 float a; 6 int b; 7 cin >> a >> b; 8 9 cout << setprecision(3) << a / b &l…
P5318 [深基18.例3]查找文献题解 用head记录这一起点的最后一条边, next记录这一起点的上一条边. 注意要按照参考文献的倒叙排序(要按顺序看,而链式前向星是逆着来的,也就是为什么最简单的zhima1182是请按输入顺序倒序输出每个顶点以及所连的终点以及权值. #include <bits/stdc++.h> using namespace std; struct {//这一个struct是模板!建议copy! struct { int to; int next; } edge[…
传送门 题目大意 往一个\(a[i][j]\) 里边放东西,也可以取走东西,然后查询\(a[i][j]\)里边是什么东西. 思路: 显然我们可以暴力,但是你开不了那么大的数组. 翻了翻dalao们的题解,为什么要用结构体呢?? 直接\(map\)他不香吗? 我们用一个\(map<int,int> ma[N];\)当做暴力的数组来做. 因为\(map\)如这个STL如果不访问的话是不是占空间的,那么我们就可以为所欲为A掉这个题了. code: #include <bits/stdc++.h…
链接:Miku -------------------- 欸,为什么我第一遍没过 -------------------- #include<iostream> using namespace std; int n; ]; ; int main(){ cin>>n; ans[l]=n; ) cout<<; ){ l++; ) n=n*+; else n=n>>; ans[l]=n; } ;--i){ cout<<ans[i]<<&qu…
题目传送门 思路 介绍一种新方法--sort排序,它的格式是这样的sort(a+1,a+n+1,cmp);,我们只需要把a数组排好序,然后输出第\(1\)个元素即可. 定义a数组与变量\(n\)并输入. int a[1000000]; int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; 使用sort对a数组进行排序. sort(a+1,a+n+1); 输出第一个元素\(a_1\). cout<<a[1]; 参考代码 #i…
题目传送门 思路 仔细读题后,我们可以发现,输出可以分成\(2\)种情况,apple加s与apple不加s,所以我们可以使用if/else来实现. 接着,我们读入n. int n; cin>>n; 进行判断,是否需要加s if(n==1 || n==0) cout<<"Today, I ate "<<n<<" apple."; else cout<<"Today, I ate "<…