UVa 10520【递推 搜索】

哇!简直恶心的递推,生推了半天。。感觉题不难,但是恶心,不推出来又难受。。一不小心还A了[]~( ̄▽ ̄)~*,AC的猝不及防。。。
先递推求出f[i][1](1<=i<=n-1),f[n][i](2<=i<=n)和f[i][j](2<=i<=n-1,1<=j<=i),再递推一次求f[1][j](2<=j<=n),f[1][n]即为答案。其实不太肯定这样是否一定正确,因为我没有特别考虑j=0的边界情况,感觉好像也用不到这个情况。而且要用long long,刚开始用int会WA。
Reference Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll f[][]={}; int main()
{
int n,an1;
while(scanf("%d%d",&n,&an1)==)
{
memset(f,,sizeof(f));
f[n][]=an1;
for (int i=n-;i>=;i--){
f[i][]=f[i+][]*;
}
for(int i=;i<=n;i++){
f[n][i]=f[n][i-]*;
}
for(int i=n-;i>=;i--){
for(int j=;j<=i;j++){
for(int k1=i+;k1<=n;k1++){
f[i][j]=max(f[i][j],f[k1][]+f[k1][j]);
}
ll t=;
for(int k2=;k2<j;k2++){
t=max(t,f[i][k2]+f[n][k2]);
}
f[i][j]+=t;
}
}
for(int j=;j<=n;j++){
for(int k=;k<j;k++){
f[][j]=max(f[][j],f[][k]+f[k+][j]);
}
}
cout<<f[][n]<<endl;
}
return ;
}
UVa 10520 递推
后来又看到了有人用深搜写,感觉其实好理解点而且不用想他们之间的递推关系,按照要求往下搜就好,省点脑子,比赛的时候适合这种写法。
Reference Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll f[][]={};
ll n,a; ll calc(int i,int j)
{
if(f[i][j]!=-)
return f[i][j];
if(i<j){
ll Max=;
for(int k=i;k<j;k++){
ll tmp=calc(i,k)+calc(k+,j);
Max=max(Max,tmp);
}
return f[i][j]=Max;
}
ll Max1=,Max2=;
if(i<n){
for(int k=i+;k<=n;k++){
ll tmp=calc(k,)+calc(k,j);
Max1=max(Max1,tmp);
}
}
if(j>){
for(int k=;k<j;k++){
ll tmp=calc(i,k)+calc(n,k);
Max2=max(Max2,tmp);
}
}
return f[i][j]=Max1+Max2;
}
int main()
{
while(cin>>n>>a)
{
memset(f,-,sizeof(f));
f[n][]=a;
f[][n]=calc(,n);
cout<<f[][n]<<endl;
}
return ;
}
UVa 10520 深搜
UVa 10520【递推 搜索】的更多相关文章
- UVa 12034 (递推) Race
题意: 有n个人赛马,名次可能并列,求一共有多少种可能. 分析: 设所求为f(n),假设并列第一名有i个人,则共有C(n, i)种可能,接下来确定后面的名次,共有f(n-1)种可能 所以递推关系为: ...
- UVa 580 (递推) Critical Mass
题意: 有两种盒子分别装有铀(U)和铅(L),现在把n个盒子排成一列(两种盒子均足够多),而且要求至少有3个铀放在一起,问有多少种排放方法. 分析: n个盒子排成一列,共有2n中方案,设其中符合要求的 ...
- hdu1078 dp(递推)+搜索
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1078 题意:老鼠从(1.1)点出发,每次最多只能走K步,而且下一步走的位置的值必须必当前值 ...
- UVa 1452 递推 Jump
约瑟夫变形,先计算出3个数时,最后三个数字的编号. 然后以这三个数为起点,就可以递推出n个数对应的最后三个数字的编号. 递推公式都是一样的. #include <iostream> #in ...
- UVa 1647 (递推) Computer Transformation
题意: 有一个01串,每一步都会将所有的0变为10,将所有的1变为01,串最开始为1. 求第n步之后,00的个数 分析: 刚开始想的时候还是比较乱的,我还纠结了一下000中算是有1个00还是2个00 ...
- UVa 1646 (递推 JAVA大数) Edge Case
题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系, ...
- UVa 1638 (递推) Pole Arrangement
很遗憾,这么好的一道题,自己没想出来,也许太心急了吧. 题意: 有长度为1.2.3...n的n个杆子排成一行.问从左到右看能看到l个杆子,从右往左看能看到r个杆子,有多少种排列方法. 分析: 设状态d ...
- UVa 1645 (递推) Count
题意: 有多少个n个节点的有根树,满足每层节点的子节点个数相同,输出该数目除以1e9+7的余数. 分析: 这种题目就属于那种,看起来很高冷,读完题更高冷.想了N久想不出来,一搜题解,卧槽,这么sb的题 ...
- UVA 11000- Bee 递推
In Africa there is a very special species of bee. Every year, the female bees of such species give b ...
随机推荐
- 【python之路32】python异常处理
一.捕获异常 1.try except #!usr/bin/env python # -*- coding:utf-8 -*- num = input("请输入一个数字:") t ...
- TZ_10_常用的2中加密算法MD5,spring-sucrity
1.MD5 在注册时需要进行加密,在登陆时也需要加密进行配对 public class MD5util { public static String stringToMD5(String psd) { ...
- laravel 下载报错:Unable to guess the mime type as no guessers are available
在使用laravel的download()函数实现下载功能时,报错如下:Unable to guess the mime type as no guessers are available (Did ...
- Ubuntu linux下部署golang配置环境,极客学院 无闻讲的安装配置是错的,折腾我好几遍,真是有点坑
开始按极客学院无闻讲的做,弄了几遍都不行,最后发现是错的,别人告诉我这是mac下的virtualbox是这样的,不管怎样,被坑的不浅. 虽然sudo apt install golang-go 就能安 ...
- IbatchBolt和BaseTransactionalBolt区别
void prepare(java.util.Map conf, TopologyContext context, BatchOutputCollector collector, T id) T id ...
- python 模拟实验
- Linux 上GCC的静态编译和动态编译
静态编译 常规编译示例: $gcc xxx.c yyy.c zzz.c -o rslt 注明: gcc编译器会对源文件min.c进行预处理, 编译, 以及链接, 最后生成可执行文件 $gcc -c x ...
- 洛谷 P1016 旅行家的预算 模拟+贪心
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车 ...
- Leetcode2.Add Two Numbers两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- Leetcode908.Smallest Range I最小差值1
给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 中. 在此过程之后,我们得到一些数组 B. 返回 B 的最大值 ...