代码源#323. 最长因子链
Posted yeah17981
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码源#323. 最长因子链相关的知识,希望对你有一定的参考价值。
最开始想了半天怎么从最长不下降组序列转到这里,后来发现没用必要搞那么麻烦,因为n比较小,直接用n方的dp写就行
和最长不下降子序列比多了一个排序和比较元素变为看是否为因子就行了
#include<iostream>
#include<algorithm>
using namespace std;
int a[100005];
int dp[100005];//dpi 当前最大因子链
int main()
long long n, m, num, i;
cin >> n;
for (int i = 1; i <= n; i++)
dp[i] = 1;
cin >> a[i];
int ans = 1;
sort(a + 1, a + 1 + n);
for (int i = 2; i <= n; i++)
for (int j = 1; j < i; j++)
if ( a[i]%a[j]==0)
dp[i] = max(dp[i], dp[j] + 1);
ans = max(ans, dp[i]);
cout << ans<<"\\n";
再送一题#61 二分答案
问就是找错地方了结果发现为啥在最短榜挺前面的位置
先sort,相邻对比,把坑补上,补不上跳出
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main()
long long n, m,num;
cin >> n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
num=a[1]+m;
for(int i=1;i<n;i++)
if(m>(a[i+1]-a[i])*i)
m-=(a[i+1]-a[i])*i;
num=a[i+1]+m/(i+1);
else
num=a[i]+m/i;
m=0;
break;
cout<<num;
以上是关于代码源#323. 最长因子链的主要内容,如果未能解决你的问题,请参考以下文章
CF EDU 1101D GCD Counting 树形DP + 质因子分解