石子合并 搞笑

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int s[];
int f[][];
int main()
{
int n,x;
scanf("%d",&n);
s[]=;
for(int i=;i<=n;i++)
scanf("%d",&x), s[i]=s[i-]+x, f[i][i]=; for(int L=;L<=n;L++)
{
for(int l=;l+L-<=n;l++)
{
int r=l+L-; f[l][r]=;
for(int i=l;i<r;i++)
{
f[l][r]=min(f[l][r],f[l][i]+f[i+][r]+s[r]-s[l-]);
}
}
}
printf("%d\n",f[][n]);
return ;
}

石子合并

poj1179 神经。。出答案的时候n写成n-1wa了两次

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int a[]; char c[],sc[];
int mx[][],mn[][]; int aslen,as[];
int main()
{
int n,x;
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<=n;i++)
{
scanf("%s%d",sc+,&a[i]);
c[i-]=sc[];
mx[i][i]=mn[i][i]=a[i];
if(i!=n)
{
c[i-+n]=c[i-];
a[i+n]=a[i];
mx[i+n][i+n]=mn[i+n][i+n]=a[i];
}
} for(int L=;L<=n;L++)
{
for(int l=;l+L-<=*n-;l++)
{
int r=l+L-;
mx[l][r]=-;
mn[l][r]=;
for(int i=l;i<r;i++)
{
if(c[i]=='t')
{
mx[l][r]=max(mx[l][r],mx[l][i]+mx[i+][r]);
mn[l][r]=min(mn[l][r],mn[l][i]+mn[i+][r]);
}
else
{
mx[l][r]=max(mx[l][r],max(mx[l][i]*mx[i+][r],mn[l][i]*mn[i+][r]));
mn[l][r]=min(mn[l][r],min(mx[l][i]*mx[i+][r],mn[l][i]*mn[i+][r]));
}
}
}
} int mmax=mx[][n];
aslen=, as[++aslen]=;
for(int i=;i<=n;i++)
if(mx[i][i+n-]>mmax)
{
mmax=mx[i][i+n-];
aslen=, as[++aslen]=i;
}
else if(mx[i][i+n-]==mmax) as[++aslen]=i; printf("%d\n",mmax);
for(int i=;i<=aslen;i++)printf("%d ",as[i]);
printf("\n");
}
return ;
}

poj1179

金字塔 怎么这里的题要么简单得要死要么难得要死啊 这个搜索顺序就。。和树上差分没撒区别嘛,我的想法是区间视作子树合并就乘起来

虽然想法好像很对而我还是太naive了不会写

对于一个区间[l,r]假如ss[l]==ss[r],那么我们可以把l+1~r-1视作一棵子树

对于当前询问的区间,枚举断点i,l+1~i形成一棵子树,让i+1~r去继续分割,同时,这样可以保证没有重复,因为1~i每次的大小不一样

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int mod=1e9; char ss[];
int f[][];
int dfs(int l,int r)
{
if(l>r||ss[l]!=ss[r])return ;
if(l==r)return ;
if(f[l][r]!=-)return f[l][r]; f[l][r]=;
for(int i=l+;i<r;i++)
f[l][r]=( ((LL)f[l][r]) + ((LL)dfs(l+,i)) * ((LL)dfs(i+,r)) )%mod;
return f[l][r];
}
int main()
{
scanf("%s",ss+);
memset(f,-,sizeof(f));
printf("%d\n",dfs(,strlen(ss+)));
return ;
}

金字塔

0x53 区间DP的更多相关文章

  1. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  2. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  3. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  4. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  5. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  6. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  7. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  8. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

  9. Uva 10891 经典博弈区间DP

    经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...

随机推荐

  1. Android 清空缓存

    APP开发中常有计算缓存大小和清空缓存的功能,此功能很常见,几乎每个应用都能看到,下面就用代码来实现此功能: 步骤为: 1.获取缓存路径 获取长时间保存的文件,Context.getExternalF ...

  2. Interrupt中断线程

    package com.wistron.swpc.ecs.util; public class WrongWayStopThread extends Thread{ public static voi ...

  3. 在 Laravel 应用中使用 pjax 进行页面加速

    说明# PHPHub 使用 pjax 来加速网页的加载, 这篇文章是在开发完此功能后做的笔记. 什么是 Pjax# .--. / \ ## a a ( '._) |'-- | _.\___/_ ___ ...

  4. Typeclassopedia

    https://wiki.haskell.org/wikiupload/8/85/TMR-Issue13.pdf By Brent Yorgey, byorgey@gmail.com Original ...

  5. SQLite 的使用

    private void button1_Click(object sender, EventArgs e) { //查询数据库内容并绑定 string sql= "select* from ...

  6. matlab学习菜单控件的基本用法

    编辑菜单项 上下文菜单,即弹出菜单 然后添加一个坐标系 添加回调函数 %余弦曲线x=0:0.01:2*pi;y=cos(x);axes(handles.axes1);%将坐标系的值写进h=plot(x ...

  7. PAT_A1115#Counting Nodes in a BST

    Source: PAT A1115 Counting Nodes in a BST (30 分) Description: A Binary Search Tree (BST) is recursiv ...

  8. 编写输出Hellow word!

    打开java运行环境(eclipse),然后输入以下语句,点击编译运行后即可输出“Hello World,”. public class HelloWorld { public static void ...

  9. JavaScript获取日期方法

    var time = new Date(); //当前时间 var year = time.getFullYear();//当前年份 var month = time.getMonth()+1; // ...

  10. Git 基础教程 之 暂存区

    工作区(working directory),就是目录,例如:pythonwork 版本库(Repository),工作区有一个隐藏的目录 .git 就是Git的版本库. 版本库最重要的是称为stag ...