4.8cf自训
发现cf以前的好题真的很多。。
cf 730j 01背包变形 感觉很好的题
- /*
- 先处理出最少需要t个瓶子
- dp[i][j][k]前i个取k个,容量为j时的水的体积
- 滚动数组搞一下
- 本题的状态转移必须从合法的状态转移来,所以一定要初始化dp=-INF,并且要有起点dp[i][0][0]=0
- 其他就是比较类似的01背包了
- */
- #include<bits/stdc++.h>
- using namespace std;
- int s,sum,t,n,a[],b[],tmp[],dp[][][];
- int cmp(int a,int b){return a>b;}
- int main(){
- cin>>n;
- for(int i=;i<=n;i++)cin>>a[i],sum+=a[i];
- for(int i=;i<=n;i++)cin>>b[i],tmp[i]=b[i],s+=b[i];
- sort(tmp+,tmp++n,cmp);
- int tot=sum;
- while(tot>)tot-=tmp[++t];
- //需要用t个瓶子
- for(int i=;i<;i++)
- for(int k=;k<=t;k++)
- for(int j=;j<=s;j++)dp[i][j][k]=-0x3f3f3f3f;
- int cur=;
- dp[][][]=dp[][][]=;//初始状态
- for(int i=;i<=n;i++){
- for(int j=;j<=s;j++)
- for(int k=;k<=min(i,t);k++)
- if(j>=b[i])dp[cur][j][k]=max(dp[cur^][j][k],dp[cur^][j-b[i]][k-]+a[i]);
- else dp[cur][j][k]=dp[cur^][j][k];//取不了第i件
- cur^=;
- }
- int ans=;
- for(int j=sum;j<=s;j++)
- ans=max(ans,dp[cur^][j][t]);
- cout<<t<<" "<<sum-ans;
- }
cf852B 矩阵加速dp+组合计数
- /*
- 矩阵优化dp
- */
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define maxn 1000005
- #define mod 1000000007
- struct Mat{
- ll a[][];
- Mat(){memset(a,,sizeof a);}
- }A;
- ll n,a[maxn],b[maxn],c[maxn];
- ll L,M,F[],cnt[];
- void mul(ll F[],Mat A){
- ll t[]={};
- for(int i=;i<M;i++)
- for(int j=;j<M;j++)
- t[i]=(t[i]+A.a[i][j]*F[j])%mod;
- memcpy(F,t,sizeof t);
- }
- Mat mulself(Mat A,Mat B){
- Mat C;
- for(int i=;i<M;i++)
- for(int j=;j<M;j++)
- for(int k=;k<M;k++)
- C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%mod;
- return C;
- }
- int main(){
- cin>>n>>L>>M;
- for(int i=;i<=n;i++)scanf("%lld",&a[i]);
- for(int i=;i<=n;i++)scanf("%lld",&b[i]);
- for(int i=;i<=n;i++)scanf("%lld",&c[i]),c[i]+=b[i];
- for(int i=;i<=n;i++)F[a[i]%M]++;
- for(int i=;i<=n;i++)cnt[b[i]%M]++;
- for(int i=;i<M;i++)
- for(int j=;j<M;j++)
- A.a[i][j]=cnt[(i-j+M)%M];
- L-=;
- while(L){
- if(L%)mul(F,A);
- L>>=;A=mulself(A,A);
- }
- memset(cnt,,sizeof cnt);
- for(int i=;i<=n;i++)cnt[c[i]%M]++;
- ll ans=F[]*cnt[];
- for(int i=;i<M;i++)
- ans=(ans+F[i]*cnt[M-i])%mod;
- cout<<ans<<endl;
- return ;
- }
cf630G 求不定方程的解个数+乘法原理 C(n+b-1,n-1)
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- ll n;
- int main(){
- cin>>n;
- ll ans=,ans1=,ans2=;
- n+=;
- ans1=n*(n-)*(n-)*(n-)*(n-)/;
- n-=;
- ans2=n*(n-)*(n-)/;
- ans=ans1*ans2;
- cout<<ans<<endl;
- return ;
- }
cf811C 给定n个元素,在上面取一些不交叉的段(选取规则:如果数值a在该段里,那么所有的数值a都要在该段里)[l,r]的贡献是里面不同数值元素的异或和
思路,处理出每个元素的范围,dp[i]表示扫描到第i个数的最优解,i可以不被放进段里,也可以放进段里,如果放进段里,就要枚举i所在的段的范围,那么枚举j:1->i,如果符合条件就更新答案
n^2来解决
- #include<bits/stdc++.h>
- using namespace std;
- int ans,dp[],l[],r[],n,a[];
- int main(){
- cin>>n;
- memset(l,0x3f,sizeof l);
- for(int i=;i<=n;i++){
- cin>>a[i];
- l[a[i]]=min(l[a[i]],i);
- r[a[i]]=max(r[a[i]],i);
- }
- for(int i=;i<=n;i++){
- dp[i]=dp[i-];//不选择第i个的情况
- int L=0x3f3f3f3f,R=,t=,flag[]={};
- for(int j=i;j>=;j--){//选了第i个
- L=min(L,l[a[j]]);R=max(R,r[a[j]]);
- if(flag[a[j]]==)
- flag[a[j]]=,t^=a[j];
- if(L<j || R>i)continue;
- dp[i]=max(dp[i],t+dp[j-]);
- }
- ans=max(dp[i],ans);
- }
- cout<<ans<<endl;
- return ;
- }
4.8cf自训的更多相关文章
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- UML基础与Rose建模实训教程
目 录 第1章 初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章 Rational Rose工具... 6 2.1 安装与配置Rational Ro ...
- <实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!
先说个事情:这几天我正在忙一个项目的设计,8月1号之前要弄出来,所以每天都要弄到很晚,可能更新就有点跟不上了,不过我如果有时间的话,我就更新,没时间的话,我会在8月1号之后统一更新出来,希望大家谅解! ...
- <实训|第五天>通过搭建NFS,FTP实现共享文件附Vim脚本游戏
先说个事情:我周末是不更新这个系列教程的,不过其他内容的会更新,我周末就整理这一周的各种内容到我的微信公众号中,提供给大家! 期待已久的linux运维.oracle"培训班"终于开 ...
- ThoughtWorks西邮暑期特训营 -- JavaScript在线笔试题
ThoughtWorks 公司在西邮正式开办的只教女生前端开发的女子卓越实验室已经几个月过去了,这次计划于暑期在西邮内部开展面向所有性别所有专业的前端培训. 具体官方安排请戳:ThoughtWorks ...
- 软件工程实训项目案例--Android移动应用开发
实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...
- <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。
期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
- <实训|第三天>Linux登录界面的修改以及Richard Stallman、自由软件运动
在写博客之前我想说两点: 承认一个错误,昨天写的实训第二天,我把redhat6.7写成了Linux6.7,感谢热心人士的指出! 昨天写的文章名字太长了,今天改善,内容感觉表述不全,希望各位谅解! 官方 ...
- <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装
期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
随机推荐
- Linux查看系统的基本信息
uname -r :显示操作系统的发行版号 uname -a:显示系统名.节点名称.操作系统的发行版号.操作系统版本.运行系统的机器 ID 号. # Ubuntu系统 ubuntu@VM-28-69- ...
- Android逆向基础----Dalvik字节码
参考此微博,更多详细内容可以到这里查看 http://blog.csdn.net/dd864140130/article/details/52076515 Dalvik字节码 1.寄存器位32位,64 ...
- Builder搭建外置服务器
如何利用HBuilder快速设置外部web服务器来测试移动web HBuilder 关于HBuilder工具的简介:HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开 ...
- SpringCloud知识点20190313
1.SpringBoot和SpringCloud的关系(面试题) Spring Boot 可以离开 Spring Cloud 单独使用开发项目,但是Spring Cloud离不开SpringBoot, ...
- Django实战(一)-----用户登录与注册系统1(环境搭建)
一.背景 学了一段时间的语法,总感觉入不了门,所以找点小项目练练手,项目来自网络. 二.创建虚拟环境,并安装Django 使用Python中的virtualenv搭建一个mysite_env全新的环境 ...
- ZKClient操作zookeeper
前面简单研究了curator的使用,下面简单研究zkclient的使用. 1.创建连接 private static final String CONNECT_ADDR = "127.0.0 ...
- IntelliJ IDEA 配置
1.让IntelliJ IDEA 驼峰选择生效 驼峰选择,就是选择的时候按照驼峰规则选择单词,不是选择整个单词 让IntelliJ IDEA 驼峰选择生效 2.查看当前类中的所有方法 Alt+7 3. ...
- Go语言中的slice
Go语言中的slice有点类似于Java中的ArrayList,但在使用上更加灵活,先通过下面一个小例子来体验一下如何通过一个已有的切片来产生一个新切片: func main() { slice := ...
- Go语言中的结构体 (struct)
Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑.本文主要对struct结构体的相关的语法进行总结和说明. ...
- Kafka监控KafkaOffsetMonitor【转】
1.概述 前面给大家介绍了Kafka的背景以及一些应用场景,并附带上演示了Kafka的简单示例.然后,在开发的过程当中,我们会发现一些问题,那就是消息的监控情况.虽然,在启动Kafka的相关服务后,我 ...