动态规划 仅思路

不容易的系列之一

题目大意:1~n个信封,1~n封信,求全部装错的情况数

思路:F[1]=0,F[2]=1,n>=3时假设信n装入信封k信m装入信封n,考虑两种情况:1)m=k,此时仅需一次对换则n,k都装对,剩余n-2个全部装错,由于k<=n-1,有n-1中取法,所以为(n-1)*F[n-2]。2)m<>k,此时将信m和信n对换则信n装入信封n信封m信k,剩余n-1全部装错,(n-1)*F[n-1]

状态转移方程:F[n]=(n-1)*F[n-1]+(n-1)*F[n-2](错排公式)

搬寝室

题目大意:在n个物品中选2*k个搬走,每次搬运疲劳度为二者重量差的平方,求最小疲劳度

思路:可证配对情况必为重量最大的与次大的为一对,最小的与次小的为一对。则可先对a[]排序。

dp[i][j]表示到1~j中选取了i对搬运,则有两种情况,a[j-1]已配对;a[j-1]未配对

初始化:dp[0][j]=0,注意 j<=2*i时dp[i][j]要初始化为INF,即j-1和j必须配对

状态转移方程:dp[i][j]=min{ dp[i][j-1] , dp[i-1][j-2]+(a[j]-a[j-1])^2 }

4982:踩方格

题目大意:无限矩阵,只能向北、东、西三个方向走,不允许走回头路,问n步内有多少条路径数

设向西、北、东三个方向走的方案数为l,r,u
1、初始l(1)=r(1)=u(1)=1
2、第i步时:
    l(i)=l(i-1)+u(i-1),仅能由之前的左继续左,之前的上往左,右边的不能回头
    r(i)=r(i-1)+u(i-1)

    u(i)=l(i-1)+r(i-1)+u(i-1)=f(i-1)

动态规划 仅思路_第1张图片动态规划 仅思路_第2张图片动态规划 仅思路_第3张图片

则f(i)=l(i)+u(i)+u(i)=2f(i-1)+u(i-1)=2f(i-1)+f(i-2)

Greedy Tino

题目大意:一堆重量0~2000的柑橘,要求取出两堆放在扁担两头且重量相等,求符合条件的最大重量

思路:dp[i][j]表示遍历到i堆时第1堆比第二堆重j,初始dp[0][0]=0,结果为dp[n][0]/2。此外需要判断是否存在重量为0的柑橘,若存在则结果为0(两堆重量为0的柑橘),否则为-1(没有这样的分堆方式)

状态转移:dp[i][j]=max(dp[i-1][j-a[i]]+a[i],dp[i-1][j+a[i]]+a[i],dp[i-1][j])

原题

题目大意:一堆人分成两拨,体重差最小

思路:在不超过1/2总体重的情况下求最大体重值,01背包问题

一下题目均能套模板,不再概述:

 8462 大盗阿福 :dp[i]=max(dp[i-2],dp[i-3])+a[i]
 8467 鸣人的影分身:n分为k个数
 6252 带通配符的字符串匹配 
 2728 摘花生 
 4978 宠物小精灵之收服 
 6045 开餐馆(重复)
 8785 装箱问题
 8787 数的划分(和复杂的整数划分重)
 666 放苹果:N划分为1、2、...、m个整数

你可能感兴趣的:(dp)