Kingdom And Dice (SRM548 Div1Medium)

Kingdom And Dice

(SRM548 Div1Medium)

1.{ai}中是0的位置可以修改成其他的数[0,x]或者不修改。

2.求p即求(每个ai>bj的个数总和)/(n*n)。

3.求使|p-0.5|最小的p,∵考虑到n<=50,∴(每个ai>bj的个数总和)<=n*n<=2500,可以求出所有可能的p,然后取min。

4.一个ai的贡献是小于ai的b的个数。

5.由于x<=1e9,需要对原数组进行离散

6.设dp[i]:总贡献为i时,最少需要改变多少个ai。设s[i]:在[B[i]+1,B[j]-1]中有多少个数

7.dp转移就是简单的多重背包

for(int j=1;j<=n;j++){
    for(int k=s[j];k>=1;k--){
        for(int i=n*n;i>=j;i--){//必须倒着
             dp[i]=min(dp[i],dp[i-j]+1);
        }
    }
}

8.发现s[i]的总和相当于[Bmin,Bmax]的区间大小,虽然可以水过去,而且还挺快,但是毕竟不够严谨,可以进行一些优化。用二进制优化多重背包,发现重复s[j]次塞入的是同一样物品,因此可以把这类东西分成log2(s[i])个独立物品,这样塞入物品的个数为log个,复杂度就有保障了

for(int i=1;i<=n;i++){
    int t=1;//枚举个数
    while(1) {
        if(s[i]>=t) {
            s[i]-=t;            
            val[++len]=t*j;
            wight[len]=min(all,t);//all是a=0的个数
        } else {
            if(s[i]>0) {//剩余不足的也算一个
                val[++len]=tmp*j;
                wight[len]=min(all,tmp);
            }
            break;
        }
        t=t+t;
    }
}   

9.那么dp就是01背包了。

dp[0]=0;
for(int i=1; i<=n*n; i++)dp[i]=55;//init
for(int k=1; k<=len; k++) {//len为物品个数
    for(int i=n*n; i>=val[k]; i--) {
        dp[i]=min(dp[i],dp[i-val[k]]+wight[k]);
    }
}

10.pay attention !求答案是请勿直接用double存,将|p-0.5|整数求最小值,最后再除以n^2,不然容易被卡精度。

int p=1e9;
for(int i=0; i<=n*n; i++) {
    if(dp[i]>all)continue;
    int sum=res+i;
    if(abs(2*sum-n*n)<abs(2*p-n*n)) {
        p=sum;
    }
}
printf("%.6f\n",1.0*p/n/n);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值