题面:https://www.cnblogs.com/Juve/articles/11663898.html

69:

本以为T2傻逼题结果爆零了。。。T3原题虽然打的不是正解复杂度但是都不记得做过这道题。。。

T1:组合数dp,发现i列与n+i列棋子个数一样,所以可以dp转移

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define re register
using namespace std;
const int MAXN=;
const int mod=1e9+;
int n,m,c,ans=,dp[MAXN][MAXN*MAXN];
int fac[MAXN],inv[MAXN],g[MAXN][MAXN];
inline int q_pow(re int a,re int b,re int p){
a%=p;
re int res=;
while(b){
if(b&) res=res*a%p;
a=a*a%p;
b>>=;
}
return res%p;
}
void get_c(int N){
fac[]=fac[]=inv[]=inv[]=;
for(int i=;i<=N;++i) fac[i]=fac[i-]*i%mod;
inv[N]=q_pow(fac[N],mod-,mod);
for(int i=N-;i>=;--i) inv[i]=inv[i+]*(i+)%mod;
}
int C(int n,int m){
if(n<m) return ;
if(n==m||m==) return ;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
signed main(){
scanf("%lld%lld%lld",&n,&m,&c);
get_c(n);
for(int i=;i<=n;++i){
for(int j=;j<=n;++j)
g[i][j]=q_pow(C(n,i),(m-j)/n+,mod)%mod;
}
dp[][]=;
for(int i=;i<=n;++i){
for(int j=;j<=min(n*i,c);++j)
for(int t=;t<=min(n,j);++t)
dp[i][j]=(dp[i][j]+dp[i-][j-t]*g[t][i]%mod)%mod;
}
printf("%lld\n",dp[n][c]);
return ;
}

array:

暴力思路:对于当前的位置i,在i前面找出第一个比a[i]大的位置j,然后在j到i中找最小值出现的位置就是i的答案

考虑优化,单调栈,维护单调递减的栈,每次pop时更新答案

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define re register
using namespace std;
const int MAXN=1e7+;
inline int read(){
re int x=;re char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'',ch=getchar();}
return x;
}
int n,a[MAXN],ans=,sta[MAXN],top=,pos[MAXN];
signed main(){
n=read();++n;
a[]=0x7fffffff;
for(int i=;i<=n;++i) a[i]=read();
sta[++top]=,pos[]=;
for(int i=;i<=n;++i){
pos[i]=i;
while(top&&a[i]>=a[sta[top]]){
if(a[pos[i]]>=a[pos[sta[top]]])
pos[i]=pos[sta[top]];
--top;
}
sta[++top]=i;
ans=max(ans,i-pos[i]+);
}
printf("%lld\n",ans);
return ;
}

70:

上来一看T1好像是高考数学,打了个表,发现的规律,然后A了,T3只会dfs搜索

T2一个可以优化成根号的dp,但是考场上状态定义错了,始终想不出转移,搜索又不好打,于是打了个40分骗分?

T1:

打表找规律,答案就是n的最大平方因子减一再乘上8

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
int n,ans=;
signed main(){
while(~scanf("%lld",&n)){
if(n==) break;
int t=sqrt(n);
for(int i=t;i>=;--i){
if(n%(i*i)==){
ans=i-;
break;
}
}
printf("%lld\n",*ans);
ans=;
}
return ;
}

T2:

考虑dp,设f[i]表示前i个的最小贡献,枚举i,然后从i-1反向枚举j,统计i到j出现的多少数,记为x,则:

f[i]=min(f[j]+x2)

然后减枝,如果x2大于f[i]就break

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=4e4+;
int n,m,a[MAXN],f[MAXN],vis[MAXN];
signed main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
f[]=;
for(int i=;i<=n;++i){
f[i]=0x7fffffff;
vis[a[i]]=i;
int x=;
for(int j=i-;j>=;--j){
if(vis[a[j]]!=i){
vis[a[j]]=i;
f[i]=min(f[i],f[j]+x*x);
if(x*x>=f[i]) break;
++x;
}
}
}
printf("%d\n",f[n]);
return ;
}

csps模拟69chess,array,70木板,打扫卫生题解的更多相关文章

  1. 10.12 csp-s模拟测试70 木板+打扫卫生+骆驼

    T1 木板 求$[\sqrt{n},n)$间有多少个数的平方是n的倍数 通过打表可以发现(我没带脑子我看不出来),符合条件的数构成一个等差数列,公差为首项 而首项就是将n质因数分解后每个质因数出现次数 ...

  2. [CSP-S模拟测试]:array(单调栈)

    题目描述 在放完棋子之后,$dirty$又开始了新的游戏. 现在他拥有一个长为$n$的数组$A$,他定义第$i$个位置的分值为$i−k+1$,其中$k$需要满足: 对于任意满足$k\leqslant ...

  3. csp-s模拟测试61砖块, 数字,甜圈题解

    题面:https://www.cnblogs.com/Juve/articles/11626350.html 砖块: 直接模拟即可,map统计被覆盖的次数 #include<iostream&g ...

  4. csp-s模拟测试56Merchant, Equation,Rectangle题解

    题面:https://www.cnblogs.com/Juve/articles/11619002.html merchant: 二分答案,贪心选前m大的 但是用sort复杂度不优,会T掉 我们只是找 ...

  5. csp-s模拟测试54x,y,z题解

    题面:https://www.cnblogs.com/Juve/articles/11606834.html x: 并差集,把不能分到两个集合里的元素和并到一起,设连通块个数为cnt,则答案为:$2^ ...

  6. csp-s模拟47 Emotional Flutter,Endless Fantasy题解

    题面:https://www.cnblogs.com/Juve/articles/11558523.html A:Emotional Flutter 如果起点确定,那么我们后面走的点都是固定的,及mo ...

  7. csp-s模拟测试53u,v,w题解

    题面:https://www.cnblogs.com/Juve/articles/11602450.html u: 用差分优化修改 二维差分:给(x1,y1),(x2,y2)加上s: $d[x1][y ...

  8. csp-s模拟测试51(b)attack,tree题解

    题面:https://www.cnblogs.com/Juve/articles/11598286.html attack: 支配树裸题? 看一下支配树是什么: 问题:我们有一个有向图(可以有环),定 ...

  9. 「10.12」木板(数学)·打扫卫生(神仙DP)

    A. 木板 一个很简单的数学题,简单推一下就好,路丽姐姐教你学数学. 将式子化出我们发现只需求出$i\times i/n$的个数 那么我们将$n$质因数分解,可知因子个数 为了整除$n$,令$i==\ ...

随机推荐

  1. AtCoder ABC 128D equeue

    题目链接:https://atcoder.jp/contests/abc128/tasks/abc128_d 题目大意 有一个双端队列,里面有 N 个整数,你可以进行如下4种操作: A:从队头那一个到 ...

  2. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  3. ECMAScript1.4 对象 | 简单数据类型与复杂数据类型 | 内置对象 | 基本包装类型 | String

    对象 函数和对象的区别: 函数:封装代码 对象:封装属性和方法 创建对象的方法: 1,对象字面量{} // 模拟创建一只dog var dog = { // 属性 name: 'puppy', age ...

  4. Codeforces 479【C】div3

    题目链接:http://codeforces.com/problemset/problem/977/C 题意:给你n个数字,输出任意一个数字,这个数字刚好大于等于,序列里面k个数字. 题解:排个序,第 ...

  5. Neo4j模糊查询及分页查询

    Neo4j模糊查询:采用正则方式: MATCH (n:House) where n.Name =~ '李.*' RETURN n 分页: 使用skip 及 limit MATCH (n:House) ...

  6. Dribbble 流行的配色风格是什么?

    Dribbble 是众所周知的设计社群网站,在网站中有许多人分享设计作品,互相交流或从其他设计获取灵感.当然也有不少网站应运而生,例如 Freebbble 可免费下载 Dribbble 数千种设计素材 ...

  7. IOS中iframe的滚动条不启作用

    引自:https://www.cnblogs.com/weinan/archive/2013/01/05/2832800.html 问题描述: iframe设置了高度(例如500px).倘若ifram ...

  8. spark 变量使用 broadcast、accumulator

    broadcast 官方文档描述: Broadcast a read-only variable to the cluster, returning a [[org.apache.spark.broa ...

  9. java日期格式汇总

    日期格式汇总 转载 2017年05月23日 17:22:25 DateFormat     java.text.DateFormat public abstract class DateFormat ...

  10. 关于webpack一些路径

    好多新手对webpack中的路径一直感到迷茫,其实再学习webpack之前都应该去了解下nodejs的内容, 以为webpack就是个nodejs项目,所以里面涉及到的路径都是nodejs里面的写法 ...