2019年3月31日-4月3日训练总结

最近的学习目标还是dp,专业课在学的对象也已经都弄懂了,相比dp,简直就是在放松娱乐。。。

dp的核心感觉就是状态转移方程了,虽然老师给的第一套题是全做完了,但是下一套今天是不打算动的,想和老师说的一样,去看看题,打算静悟会。主要是感觉仍是做题不顺,磕磕绊绊的,完全就是莫名其妙的ac,看自己之前做过去的题第二遍都不一定能做出来,思路也不清晰,就是按照之前的模板,套着套着就过了,很奇怪,感觉不是自己想要的感觉。

虽然菜,但是总结还是得做的,也参考了大佬的文章,总结一下吧,毕竟dp的模板辣么的重要。今天也不去刷题了,安安静静的整理个总结,归纳个模板,看看题,一血还是想的,但是巩固对现在的我而言更重要一些。大部分二维背包都能简化,就不做整理了,直接上最优解。

学的比较有限,暂时只整理背包问题的了,剩下的只能等着再补了。

01背包(给定重量,价值,背包空间,求背包最大价值)

for(int i=0;i<n;i++){
    for(int j=W;j>=w[i];j--){//完全背包相反
        dp[j]=max(dp[j],dp[j-w[i]]+v[i])
    }
}

完全背包(区别01,每件物品可以无限次使用)

for(int i=0;i<n;i++){
    for(int j=w[i];j<=W;j++){//容积w的限制下,物品i的多次使用,而01背包的逆向处理就无法实现这个无限次利用
        dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
    }
}

多组背包(物品给定件数,01形式)

for(int i=0;i<n;i++){
    int num=n[i];
    for(int k=0;k<=num[i];k++){
        for(int j=W;j>=w[i];j--){
            dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
        }
    }
}

多组背包的二进制优化法还不是很明白,暂且不做整理了,等做几道相关的额题,透彻了再补上。

明天也要加油鸭!

猜你喜欢

转载自blog.csdn.net/qq_43141958/article/details/88990878