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培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
随机推荐
- renren-security旧版本 分模块 的模块之间关系浅析
Maven结构,一个父模块 六个子模块 七个pom.xml: \git\renren-security\pom.xml <modules> <module>renren-com ...
- SQL SERVER 2008 R2安装的时候提示“该实例名称MSSQLSERVER已在使用
SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法._冷雨玫瑰_新浪博客---和这文章描述差不多http://blog.sina.com.cn/s/blog_672b419f0 ...
- 解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题
通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说 ...
- 安卓虚拟机与Hyper-V冲突
经过各种经验,哪个安卓虚拟机跟Hyper-V都存在着冲突. 解决方案一 程序中卸载Hyper-V,之后还要再配置太麻烦. 解决方案二 1.关掉Hyper-V的启动项,命令如下. bcdedit /se ...
- CF1101G (Zero XOR Subset)-less
题目地址:CF1101G (Zero XOR Subset)-less 线性基基础题 预处理一个前缀异或和 \(s_i\) 这样题目就变成了:在 \(n\) 个 \(s_i\) 中尽量选择多的数使选择 ...
- linux+php实现定时任务[链接]
1.crontab 详细用法 定时任务 https://www.cnblogs.com/aminxu/p/5993769.html 2.查看crontab日志 https://www.cnblogs. ...
- SQL逻辑查询语句执行顺序
阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...
- mac安装adb
安装 brew cask install android-platform-tools 测试 adb devices
- VC操作excel
http://www.cnblogs.com/witxjp/archive/2010/06/05/1752181.html 最近在做个数据库程序,因为有些数据用户要求导出到Excel文件显示(需要 ...
- NOI2019 SX 模拟赛 no.5
Mas 的童年 题目描述:不知道传送门有没有用? 反正就是对于每个前缀序列求一个断点,使得断点左右两个区间的 分别的异或和 的和最大 分析 jzoj 原题? 但是我 TM 代码没存账号也过期了啊! 然 ...