寒假四

2 思维题 (题目读了半天)
排序 减去n-1个最大之间的间隔 求最小次数能够遍历数轴上所有点
n=2 两个棋子 分开往左和右走 能省略中间一段距离
3 数学 gcd 被攻击的怪物血量减少是攻击怪物的因数
4 这是先排序的 类似寒假三的滑动窗口
5 贪心的考虑高位 其实这道题贪心不了
for(int i=40;i>=0;i--){
if((x^1LL<<i)>m)continue;
if(c[i]<n-c[i])x^=1LL<<i;
}
注意加1LL
注意^ 的优先级 比<< 低 所以先计算<<在^
6
int ans=sum+cnt*cnt;//这个初始化非常细节 是个边界 可能是极值
for(int i=k+1;i<=n&&b.size();i++) 不加b.size()卡边界不合法情况
前k大都是同类的数据点
贪心前k大加替换标记种类数
7
if(u>=c[a[i]]&&f[u]==f[u-c[a[i]]]+1)
完全背包压缩成一维 二维度这里不好找到 最优路径
逆向查找构成最大数字的路径
比较贪心 先找最长的f[n]然后按照 逆序替换输出a[i]

if(u>=c[a[i]]&&f[u]==f[u-c[a[i]]]+1){
u-=c[a[i]];
cout<<a[i];
break;//从头开始遍历可能存在最优解
}
}

posted @ 2024-05-17 19:05  爱吃湫鰍的喵酱  阅读(12)  评论(0)    收藏  举报