【2019.11.5】

2019.11.5

开方

可以找到规律der 然后特判 开方五次最大为\(2^{32}-1\) 注意可能有前导零

要注意特殊数据\(0,1\)== 然后我没有注意到\(1\)... 行叭我是瘟猪

int main(){
    //freopen("sqrt.in","r",stdin);
    //freopen("sqrt.out","w",stdout);
    for(;scanf("%s",s+1)!=EOF;){
        n=strlen(s+1),x=0ll,st=1;
        while(s[st]=='0'&&st<=n) ++st;
        if(n-st+1>=11){puts("TAT");continue;}
        for(int i=st;i<=n;++i)
            x=(x<<3)+(x<<1)+(s[i]^48);
        if(x>=((ll)1<<32)){puts("TAT");continue;}
        if(x==0) {puts("TAT");continue;}
                if(x==1){puts("0");continue;}
        if(x<4){puts("1");continue;}
        if(x<16){puts("2");continue;}
        if(x<256){puts("3");continue;}
        if(x<65536){puts("4");continue;}
        else puts("5");
    }
    return 0;
}

染色

我离正解只差一个暴力撕烤

发现就是构成一个树

先prim构一个最小的树 后面不管搞不搞多边形肯定也是这样连边 把这样连的时候的边记录下来

然后暴力枚举多边形的染色情况 用并查集来维护 按照之前记录的边来加入

struct node{int x,y;}a[N],e[N];
struct duo{int k,c,a[N];}b[M];
int dist(int x,int y){return (a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y);}
bool cmp(node x,node y){return mp[x.x][x.y]<mp[y.x][y.y];}

int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
void work(int sta){
    ll ret=0;
    for(int i=1;i<=n;++i) f[i]=i;
    for(int i=1;i<=m;++i)
    if((1<<(i-1))&sta){
        ret+=b[i].c;
        for(int j=2,x=find(b[i].a[1]);j<=b[i].k;++j) f[find(b[i].a[j])]=x;
    }
    for(int i=1;i<n;++i)
        if(find(e[i].x)!=find(e[i].y)) ret+=mp[e[i].x][e[i].y],f[f[e[i].x]]=f[e[i].y];
    ans=min(ans,ret);
}

int dis[N],pre[N];bool vis[N];
void prim1(){
    for(int i=1,u=0;i<=n;++i,u=0){
        for(int j=1;j<=n;++j) if(!vis[j]&&dis[j]<dis[u]) u=j;
        vis[u]=1,ans+=dis[u],e[i-1]=(node){pre[u],u};
        for(int v=1;v<=n;++v) if(!vis[v]) dis[v]>mp[u][v]?dis[v]=mp[pre[v]=u][v]:1;
    }
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("T1.txt","r",stdin);
#endif
    rd(n),rd(m);
    for(int i=1;i<=n;++i) rd(a[i].x),rd(a[i].y);
    for(int i=1;i<=n;++i)
        for(int j=i+1;j<=n;++j) mp[i][j]=mp[j][i]=dist(i,j);
    memset(dis,inf,sizeof(dis)),dis[1]=0,prim1();
    sort(e+1,e+n,cmp);
    for(int i=1;i<=m;++i){
        rd(b[i].k),rd(b[i].c);
        for(int j=1;j<=b[i].k;++j) rd(b[i].a[j]);
    }
    for(int i=1;i<(1<<m);++i) work(i);
    printf("%lld",ans);
    return 0;
}

心情

动态规划杀我\(QAQ\)

首先做必须要做的预处理,将?小相同且相邻的数字用 len[i],color[i] 表示出来。color 记录的是数字,len 记录的是 长度

例如:\(\{1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 4\}\) 则 \(len = \{3, 2, 2, 3, 1, 1\} \ color =\{1, 2, 3, 4, 5, 4\}\)

我们要处理的是许多小串,可以想到将?问题划归成若?个 小问题,可以用区间 DP。于是可以先确定两维\(f[i,j]\)表示处理区间\([i,j]\)的最?值,但是这样?法处理跨区间连接起来?起消的问题。

看题目范围:n ≤ 300

猜想空间用三维。于是再引进?个 k,这个 k 表示什么呢?

为了能使处理到后面能够使用前面得到的东西,我们用 k 表 示在区间\([i,j]\)后再接上长度为 k 的串得到的值。\(f[i, j, k]\)表示将\((color[i], len[i])· · ·(color[j ? 1], len[j ? 1]),(color[j], len[j] + k)\)合并的最?值。

如果消掉第\(j\)个数字,那么\(f[i, j, k] = f[i, j ? 1, 0] + (len[j] + k)^2\)

如果将第\(j\)个数字连着前面的数字?起消掉,那么我们还要 再枚举?个\(p (i ≤ p < j)\)使得\(color[j]=color[p]: f[i, j, k] = f[i, p, k + len[j]] + f[p + 1, j ? 1, 0]\)

于是得到转移?程:$f[i, j, k] = max{f[i, j?1, 0]+(len[j]+k) 2 , f[i, p, k+len[j]]+f[p+1, j?1, 0]} $

int dfs(int i,int j,int k){
    if(f[i][j][k]) return f[i][j][k];
    if(i>j) return 0;
    f[i][j][k]=dfs(i,j-1,0)+(len[j]+k)*(len[j]+k);
    for(int p=pre[j];p>=i;p=pre[p])
        f[i][j][k]=max(f[i][j][k],dfs(i,p,k+len[j])+dfs(p+1,j-1,0));
    return f[i][j][k];
}
int main(){
#ifndef ONLINE_JUDGE
    freopen("T1.txt","r",stdin);
#endif
    rd(n);
    for(int i=1,pre=1;i<=n;++i)
        rd(a[i]),(pre!=i&&a[pre]==a[i])?++len[tt]:(col[++tt]=a[i],pre=i,++len[tt]);
    for(int i=1;i<=tt;++i) pre[i]=las[col[i]],las[col[i]]=i;
    printf("%d",dfs(1,tt,0));
    return 0;
}

summary

  • 又双叒叕犯sb错误
  • 思路还是混乱
  • dp杀我!!!

原文地址:https://www.cnblogs.com/lxyyyy/p/11800137.html

时间: 2024-10-08 05:33:49

【2019.11.5】的相关文章

【2019.11.1】ZA

noip2012 Vigenère 密码 模拟 用的以前的方法 然后我康了康yyb的 发现我好菜 int r[30][30]; void pre(){ for(int i=1;i<=26;++i) for(int j=0;j<=26-i;++j) r[i][i+j]=j+1; for(int i=2;i<=26;++i) for(int j=28-i;j<=26;++j) r[i][j-27+i]=j; } int main(){ #ifndef ONLINE_JUDGE freo

【2019最新版】免接口!!涛舅舅轻奢版视频强制裂变程序,免公众号免备案域名!

轻奢版视频强制裂变程序[免接口版]正式上线,不需要认证公众号和备案域名! 优化防封和跳转逻辑,入口.落地.分享域名全部隔离 并加入针对微信IOS版的特殊防封策略! 除了分享卡片没有“小字描述”和“分享图标”以外,其他功能和[接口版]基本无差异! 轻奢版视频免接口版主要更新如下: 1.代码完全重构,大范围增强了程序的健壮性! 2.加入FuckXX脚本,禁止一切XX节点的访问,优化防封! 3.加入来路判断,非法访问将禁止,强化防封! 4.数据全部缓存化,前台完全避免对数据库的请求调用,所有数据调用全

【2019南京赛】

hello 2019:题意: 给出区间,要你在查询区间内有9102,同时没有8012的序列,需要删除多少个数字. 多次询问,所以给上我们的线段树. 这道题有原题: 我们dp表示i从状态i到状态j的操作次数, 我们定义0,1,2,3,4为"",2,20,201,2017的状态.对于每个状态用矩阵表示: 如dp[1][2]从状态为2到20: 例如我们看其中一个地方{ if(s[l]=='2') p[cur].a[0][0]=1,p[cur].a[0][1]=0; 表示此刻遇到了2,那么就0

【2017.11.07】noip赛前集训 | T1 遭遇【DP】

T1 遭遇 [题意] ??座楼房,立于城中. 第??座楼,高度???. 你需要一开始选择一座楼,开始跳楼.在第??座楼准备跳楼需要????的花费. 每次可以跳到任何一个还没有跳过的楼上去.但跳楼是有代价的,每次跳到另 外一座楼的代价是两座楼高度的差的绝对值,最后一次从楼上跳到地面上不需 要代价(只能跳到地上一次).为在代价不超过??的情况下,最多跳几次楼. (一座楼只能跳一次,且每次跳楼都要计算准备的花费) [题解] 跳楼时,楼房的高度是具有单调性的,所以先按照高度排序. f[i][j]表示已经

【2019最新资料】米尔iMX8M系列开发板MYD-JX8MX功能清单

2019年6月,米尔推出的基于NXP iMX8M系列芯片的开发平台MYD-JX8MX系列开发板,已开始量产.下面介绍这款开发板的功能:MYD-JX8MX 集成了丰富的外设资源,充分发挥了 i.MX8M 的产品性能,并定向目前主流产品应用提供了专用外设,主要特色资源如下:1.丰富的音视频接口(1) 双路视频输出:a.1 路为 HDMI 输出,支持 4K 分辨率高清输出b. 另一路由主芯片 MIPI-DSI 接口直接引出,同时在电路上将该 MIPI-DSI 转接为 LVDS 电路,客户根据屏幕情况二

【2016.11.18】进制转换

二进制:0.1       逢二进一    基数:2 需要用二进制来表示一个2 0.1 八进制:0~7        逢八进一    基数:8     2^3=8  一个八进制可以表示3位二进制 使用八进制表示8  10 0.1.2.3.4.5.6.7  表示8 (10)8 十进制:0~9        逢十进一    基数:10 0.1.2.3.4.5.6.7.8.9     表示10 10 十六进制:0~F      逢十六进一    基数:16    2^4 = 16  一个十六进制可以表

【2019.8.14】2019QB学堂DP图论班第一次考试 Problem C

Problem C Problem Description Tarzan 非常烦数轴因为数轴上的题总是难度非常大.不过他非常喜欢线段,因为有关线 段的题总是不难,讽刺的是在一个数轴上有 n 个线段,Tarzan 希望自己喜欢的东西和讨厌的 东西不在一起,所以他要把这些线段分多次带走,每一次带走一组,最多能带走 k 次.其实 就是要把这些线段分成至多 k 组,每次带走一组,问题远没有那么简单,tarzan 还希望每次 选择的线段组都很有相似性,我们定义一组线段的相似性是组内线段交集的长度,我们现在

【2019.9.25】Za

容斥 容斥 \(\Big|\bigcup\limits_{i=1}^nS_i\Big|=\sum\limits_{m=1}^n(-1)^{m-1}\ \sum\limits_{a_i<a_{i+1}}\Big|\bigcap\limits_{i=1}^mS_{a_i}\Big|\) 不定方程非负整数解计数 不定方程\(\sum_{i=1}^n\ x_i=m\)和\(n\)个限制条件\(x_i\le b_i\) 没有限制时 其非负整数解为\(C_{m+n-1}^{m-1}\) 相当于有\(m\)个

【2019.10.18】luogu TG5动态规划进阶

树形dp P1352 没有上司的舞会 P2607 骑士(review) 对于每一个"联通快" 只有根节点有机会形成环 强制不选\(rt\)和\(rt\)的父亲 各跑一遍 P1131 时态同步(review) 贪心 显然增加深度约小的边越优 从下到上来调整 先将同一个点的儿子们延伸到一样 再往上进行一样的操作 //apio 烟火 树上背包? 一棵\(n\)个点的树,有点权.选择一个大小不超过\(K\)的联通块,使得点权和最大.\(n ≤ 2000\) \(f(x, i)\)表示\(x\)