首页 > 其他分享 >CF DP题练习

CF DP题练习

时间:2024-06-04 22:14:40浏览次数:7  
标签:return read max ll 练习 CF lcm clear DP

2024.6.3

1997C.Nikita and LCM *1900
我们令 \(M = lcm(a_1,...a_n)\),则 \(a\) 的任何一个子序列的 \(lcm\) 一定是 \(M\) 的因数。
若 \(M\) 大于 \(a\) 中的任意一个数,则答案为 \(n\)。
否则,我们可以以因数表示为 状态,线性转移即可。
状态可以存到 \(set\) 中利用 \(map\) 转移。
复杂度 \(O(nClog(C))\),\(C\) 大约为 \(500\)。(注意不要爆 \(longlong\) !!)

int t,n,ans;
ll a[N],mx,lc;
ll lcm(ll x,ll y){
    if(x > 1e9 || y > 1e9)return inf;
    return x * y / __gcd(x,y);
}
set<ll>st;
map<ll,int>f,v,g;
void solve(){
    st.clear(),f.clear(),v.clear();
    st.insert(1);
    f[1] = 0,ans = 0;
    for(int i = 1;i <= n;i++){
        v[a[i]] = 1;g = f;//需要一个转移数组 g
        for(auto state:st){
            ll x = lcm(state,a[i]);
            f[x] = max(f[x],g[state]+1);
            st.insert(x);
        }
    }
    for(auto state:st)
        if(!v[state])ans = max(ans,f[state]);
    printf("%lld\n",ans);
}
int main(){
    t = read();
    while(t--){
        n = read();
        lc = 1,mx = 0;
        F(i,1,n)a[i] = read(),mx = max(mx,a[i]),lc = lcm(lc,a[i]);
        if(lc > mx){
            printf("%d\n",n);
            continue;
        }
        solve();
    }
    
	return cerr << "Time : " << clock() << " ms" << endl, 0;
        
}

2024.6.4

545C. Woodcutters *1500
可以贪心,不过我是来练 \(dp\) 的。
我们设 \(f_{i,0/1/2}\) 代表第 \(i\) 棵树 向左倒/不砍/向右倒
可以列出方程直接写即可。

n = read();
F(i,1,n)a[i].x = read(),a[i].h = read();
f[1][0] = 1;if(a[2].x - a[1].x > a[1].h)f[1][2] = 1;
a[n+1].x = inf;
F(i,2,n){
    f[i][1] = max(f[i-1][0],max(f[i-1][1],f[i-1][2]));
    if(a[i].x - a[i-1].x > a[i].h)f[i][0] = max(f[i-1][0],f[i-1][1]) + 1;
    if(a[i].x - a[i-1].x > a[i].h + a[i-1].h)f[i][0] = max(f[i][0],f[i-1][2]+1);
    if(a[i+1].x - a[i].x > a[i].h)f[i][2] = max(f[i-1][0],max(f[i-1][1],f[i-1][2])) + 1;
}
printf("%lld\n",max(f[n][0],max(f[n][1],f[n][2])));

标签:return,read,max,ll,练习,CF,lcm,clear,DP
From: https://www.cnblogs.com/HaoXu-qwq/p/18229625

相关文章

  • 最新版wordpress网创资源美化以及更新自动同步插件
    最新更新了美化右侧悬浮图标底部分类板块,以及文章自动同步插件1.支持分类替换将主站同步过来的文章分类进行替换2.支持本地化文章图片(使用储存桶可能会导致无法保存图片)3.支持自定义文章作者(选择多个作者则同步到的文章作者将会随机分配)4.支持将同步过来的文章自定义文......
  • CF1572A Book
    题目链接:https://codeforces.com/problemset/problem/1572/A大致思路:题目想问的是从头到尾阅读多少次之后,才能读完这本书.这是一道很套路的拓扑排序的题.看到一个事件有前置条件这种,就应该想到建一个有向无环图然后跑拓扑排序,在这里,我们建立一条从前置条件指向当前页码的......
  • UDP协议的应用——域名解析
    设计程序实现解析www.baidu.com的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确/*************************************************************************************************************************** filename: udp_cs.c* author :Dazz* d......
  • 网络编程练习题---利用UDP协议实现组播通信
    目录题目解析代码实现题目解析由于该题需要实现组播通信,所以我们需要将套接字文件句柄设置为组播属性,并将需要通信的用户端IP地址,加入组中。由于组播通信需要实现一对多发送消息,所以还需要将套接字文件句柄的广播属性一并开启。由于该题实现过程使用到了线程相关函数接口,所......
  • CF1980
    小号打的抽象比赛,谁知道再给我30min能不能AK?AB一眼。Cunordered_map会被卡,建议multiset。D前缀和后缀和。E发现列和行是独立的,于是对列和行分别检查。若置换矛盾,则不合法。F经过观察,一行的答案为后缀最小值-1。所以F1就能做出来了。考虑F2,对行拆贡献,维护后缀......
  • udp协议实现组播功能
    /****************************************************************************************************************************************filename:multicast.c*author:[email protected]*date:2024/06/04*brief:小组实现,小组中的每位......
  • UDP练习题——实现将自己加入到多播组中并等待服务器发送数据包
    设计程序,要求程序可以加入到一个多播组中并等待服务器发送,数据包,并且程序还需要具有发送功能,如果收到数据包则把消息内容输出到终端,消息内容格,式「消息来源IP消息时间1:消息内容多播地址和端口号/*************************************************************************......
  • 免费使用TasteWP一键搭建线上临时WordPress网站
    虽然用宝塔面板或者1Panel面板可以非常快速的搭建一个WordPress网站,但是有时候只想测试下我设计的页面或者开发的主题和插件,又得买服务器,绑定域名,安装程序,搭建起来也过于浪费时间了;再或者,我只想学习WordPress基础操作,从零开始搭建还是过于困难,因此,今天我推荐一个特别好用的工具:Tas......
  • eDP V1.4协议介绍
    一、说明eDP的全称是EmbeddedDisplayPort嵌入式显示端口,主要应用与短距离系统内应用,例如手机、一体式台式机等。eDPV1.4b是基于DPV1.3标准制作完成,但因应用场景的不同,还是有很多区别。电压摆幅不同,eDP相对较低;eDP功耗相对较低;DP有线材和连接器的要求,eDP没有明确要......
  • JAVA面向对象练习题
    题目要求:        定义图书类(Book),要求有属性name(书名),price(价格),author(作者),对Book类进行封装。在测试类里的主方法中创建3本图书对象,并赋值。创建一个长度为3的Book类数组,在数组里,存放这3个图书对象。题目分析:  图书类Book:    属性:   ......