最开始想了半天怎么从最长不下降组序列转到这里,后来发现没用必要搞那么麻烦,因为n比较小,直接用n方的dp写就行
和最长不下降子序列比多了一个排序和比较元素变为看是否为因子就行了
#include#include 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,相邻对比,把坑补上,补不上跳出
#includeusing 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 (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<



