week1

poj2836

题意:给出n(2<=n<=15)个点的坐标,用定点为整点的长方形来覆盖,求长方形和的最小值

思路:枚举长方形的状态,以及它能覆盖点的集合为st,枚举点的集合状态state,时间:O(n^2*2^n)

dp[state|st]=min(dp[state|st],dp[state]+area(v[i],v[j]));

注意:由于要求长方形顶点是整点,对于在一条直线上的点,可以用宽为1的长方形来覆盖

Code:poj2836.cpp


uva12045

题意:一些只有{a,b}的字符串,第i个串为str,第i+1个串为第i个串中所有a换成b,所有b换成ab

已知第a个长度为n,第b个长度为m,求第c个的长度%(10^9+7)

思路:设初始串为x个a,y个b:

f(a)*x+f(a+1)*y=n

f(b)*x+f(a+1)*y=m

求出x,y值,然后ans=(f(c)*x+f(c+1)*y)%mod

Code:uva12045.cpp


uva12037

题意:n个椅子染色,有k种选择,保证环形的情况下,任意连续三个颜色不一样(1<=n,k<=10^9)

思路:n<=4的时候特判,大于4的时候画状态图分析:每次从左边插入,last表示最后两位,recent表示插入位置往右两位的状态。

state   recent   last   feature     be reached           formula

  N       ab      cd    四位均不同     N,C,D      N=(k-4)*N+(k-3)*C+(k-3)*D;

  A       ab      ac      11同         N,D                A=N+D;

  B       ab      bd      21同         N,C                B=N+C;

  C       ab      cb      22同         A,F           C=(k-3)*A+(k-2)*F;

  D       ab      da      12同         B,E           D=(k-3)*B+(k-2)*E;

  E       ab      ba    12、21同        A                  E=A;

  F       ab      ab    11、22同        F                  F=B;


根据状态图得到的formula构造矩阵,初始矩阵为N=k*(k-1)*(k-2)*(k-3),B=k*(k-1)*(k-2),其余为0

最后答案为 N+C 

Code:uva12037.cpp


hdu4846

题意:求最大子方块

思路:二分边长

Code:hdu4846.cpp


zoj3537

题意:判断凸包,求最小花费将凸包分割成若干个三角形,给出花费公式cost=abs(a.x+b.x)*abs(a.y+b.y)%p

思路:区间dp,dp[i][j]表示从i到j全部分成三角形的最小花费,dp[i][j]=min(dp[i][k]+dp[k][j]+cost[i][k]+cost[k][j]);

Code:zoj3537.cpp


loj1422

题意:参加n场舞会要穿不同的衣服,可以把一件衣服套在另一件上,不同的舞会可能穿同一件衣服

思路:区间dp,dp[i][j]表示从第i场舞会到第j场至少需要的衣服件数,dp[i][j]=min(dp[i+1][k]+dp[k+1][j]) (if(a[i]==a[k]))

Code:loj1422.cpp


poj2955

题意:求字符串中子序列中配对的括号的最大长度

思路:区间dp,do[i][j]表示从i到j建配对的最大长度,dp[i][j]=max(dp[i][k]+dp[k+1][j])

Code:poj2955.cpp


hdu2254

题意:求某一段时间内,从v1到达v2的方案数

思路:构造矩阵

Code:hdu2254.cpp


ccnu4406

http://ccnu.acmclub.com/index.php?app=problem_title&id=613&problem_id=4066

题意:跟08年哈尔滨那道一样,判断能不能通过(哈尔滨那道题找了两个oj暂时都在维护中,想起来可以改一下拿过来交)

思路:随着角度的变化,高度先增后减,三分判断最大值是否小于过道

Code:ccnu4066.cpp 

hdu2438.cpp


poj3301

题意:求一个最小的正方形覆盖30个点

思路:旋转坐标系,三分旋转的角度

Code:poj3301.cpp


poj1141

题意:给定一个括号的字符串,求用最小的括号使它合法,输出路径

思路:区间dp+递归输出路径

dp[i][j]表示从i到j变成合法所需加的最小括号数,if(s[i]匹配s[k]) dp[i][j]=dp[i+1][k-1]+dp[k+1][j];[a[i][j]表示中间过渡用到k值,然后递归输出路径

Code:poj1141.cpp


poj1651

题意:n个数字中取出n-2个,首位不取,每次取的时候得分为以它为中心三个数字的乘积,求和的最小值

思路:区间dp,用dp[i][j]表示从第i位到第j位首位不取,取完所有数字的最小值

dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]),i,j接近的时候特判

Code:poj1651.cpp




“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值