2017-07-17:考试

来源:互联网 发布:光盘数据恢复软件 编辑:程序博客网 时间:2024/06/03 09:29

第一题:很简单的DP:找按1807顺序出现的子序列
举例:找怎么加入一个0,max这个0之前以0结尾的最长子序列和这个0之前以8结尾的最长子序列

    for (int i=0;i<len;i++){        if (c[i]=='1') f[0]++;        if (c[i]=='8' && f[0]!=0) f[1]=max(f[1],f[0])+1;        if (c[i]=='0' && f[1]!=0) f[2]=max(f[1],f[2])+1;        if (c[i]=='7' && f[2]!=0) f[3]=max(f[2],f[3])+1;    }

第二题:
思想:建立超级点,单向从超级点向黑点连边,再加上原有的边形成图后跑SPFA,
最后用于更新最短路的边是到超级点所必过的边,可用于构建答案,
有可能有多条边满足,为了避免加重,建立并查集,若一条边两端点得的father一致则不加此边。
错误原因:
1.跑SPFA是双向边,edge[N*2]开两倍大小,数组开小了
2.用fill的时候fill(dis,dis+n+1,IFN) 适当将fill末尾开长一点

原创粉丝点击