uva
wwhtsl
这个作者很懒,什么都没留下…
展开
-
UVALive-3516Exploring Pyramids
题目传送 思路: 我们用f[n]表示gcd(1,n)+gcd(2,n)+gcd(3,n)+’…gcd(n-1,n),用s[n]表sum{f[i]|1<=i<=n} 则s[n]=s[n-1]+f[n];现在就是求f[n].因为 f[n]=gcd(1,n)+gcd(2,n)+gcd(3,n)+’…gcd(n-1,n),所有gcd(i,n)的值都是n的约数,可以按照约数值进行分类。例如gcd(i,n)=x,我们用g(n,x)表示和n的gcd为x的数有多少个,即满足条件的gcd(i,n)=x中的i有多少原创 2020-07-09 21:25:55 · 133 阅读 · 0 评论 -
UVA10635--Prince and Princess
题目传送 题意: 求a序列和b序列的最长公共序列(LCS)。 思路: 显然不能用二维数组的方法来做,那样会超时。因为a和b的里面的元素不相同,我们可以用位置来表示a序列,里面的值是【1,2,3…,p+1】,而新的b序列表示的是旧b里面的元素在a序列里面的位置,放入新b中,保证新b序列里面的元素位置是a和b的公共位置。因为a里面的位置是上升的,所以只要在新b中找LIS,就是a和b的LCS。 代码: #include<iostream> #include<algorithm> #incl原创 2020-07-08 11:56:16 · 143 阅读 · 0 评论 -
Commando War
题目传送 题意: 你给N个士兵交代任务,其中你对第i个士兵花费bi的时间来介绍,而第i个士兵则要花费ji的时间来完成,问最小花费多少时间使所有的任务都完成? 思路: 安排任务花费时间越多的人,越早完成它,进行一次贪心算法,按照J对士兵们进行从大到小的排序,然后每次比较每个士兵最晚完成任务的值,取个最大值就行。 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; stru原创 2020-07-07 13:32:57 · 482 阅读 · 0 评论