1、poj  3267

题意:给你一个字符串,下面有若干单词,问字符串要变成由下面单词组成的字符串,至少要删除多少个字母......

例如:

6 10
browndcodw
cow
milk
white
black
brown
farmer

其中,brown和cow可以组成browncow,这样至少是删除两个字母.......当然,下面的单词可以重复利用......

思路:dp[i]表示历遍到第i个字符时要删除的最少字母数,那么从后面往前面历遍,dp[i]=dp[i+1]+1

若是在i~~lens中,可以找到某个字符串,并且首字母就是i所处位置的字符,那么动态转移dp[i]=min(dp[i],dp[pos]+lens-i-lent);

 #include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[];
char s[],t[][];
int main()
{
int lens,m;
while(scanf("%d%d",&m,&lens)>)
{
scanf("%s",s);
for(int i=;i<m;i++)
scanf("%s",t[i]);
dp[lens]=;
for(int i=lens-;i>=;i--)
{
dp[i]=dp[i+]+;
int lent;
for(int j=;j<m;j++)
{
lent=strlen(t[j]);
int p=,p1=i;
if(s[i]==t[j][])
while(p<lent&&p1<lens)
{
if(s[p1]==t[j][p])
{
p1++;
p++;
}
else
p1++;
}
if(p==lent)
{
dp[i]=min(dp[i],dp[p1]+p1-i-lent);
}
}
}
printf("%d\n",dp[]);
}
return ;
}

2、poj  1083(贪心)

题意:有400个房间......房间是这样排的:

就是过道只能容纳一个人过去,而且每一次也只能经过一个人,比如说,4~~6,2~~5,每次去的时候,需要十分钟,那么这样一组数据,需要走20分钟。

但是有个问题,如果是从2~~3,4~~5,这样也是需要20分钟的,因为2~~3要占用1、2过道,4~~5是要占用2、3过道......所以需要20分钟。

思路:开一个记录房间的数组,每次只要走过这些房间,那么就++,然后取最大值就好......

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
int k,p;
}s[];
int h[];
int main()
{
int text,cnt=;
scanf("%d",&text);
while(text--)
{
int n;
scanf("%d",&n);
memset(h,,sizeof(h));
for(int i=;i<=n;i++)
{
int tmp,tmp1;
scanf("%d%d",&tmp,&tmp1); if(tmp>tmp1)
{
tmp=tmp+tmp1;
tmp1=tmp-tmp1;
tmp=tmp-tmp1;
}
s[i].k=tmp;
s[i].p=tmp1;
if(s[i].k%)
s[i].k++;
if(s[i].p%)
s[i].p++;
for(int k=s[i].k;k<=s[i].p;k++)
h[k]++;
}
int sum=; for(int i=;i<=;i++)
if(h[i]>sum)
sum=h[i];
printf("%d\n",sum*);
}
return ;
}

3、

题目大意:

一套通讯系统由一些设备组成,每种设备由不同的供应商供应,每个供应商供应的同种设备有各自的带宽(bandwidth)和价格(prices)。通讯系统的带宽(B)指的是组成该系统的所有设备的带宽的最小值,通讯系统的价格(P)指的是组成该系统的所有设备的价格之和。求最大的 (B / P)。

思路:好吧,dp[i][j]代表在选择第i种产品,带宽为j的时候的最少价格,在后面,直接历遍i/dp[n][i],取最大值.......

那么,有,dp[i][j]=min(dp[i][j]  ,  dp[i-1][j] + p)

 #include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[][];
struct node
{
int num;
int p;
}s[][];
int t[];
int main()
{
int text;
scanf("%d",&text);
while(text--)
{
int n;
scanf("%d",&n);
//cnt=1;
int maxn=;
for(int i=;i<=n;i++)
{
int m;
scanf("%d",&m);
t[i]=m;
for(int j=;j<=m;j++)
{
scanf("%d%d",&s[i][j].num,&s[i][j].p);
if(maxn<s[i][j].num)
maxn=s[i][j].num;
} }
for(int i=;i<=n;i++)
for(int j=;j<=maxn;j++)
dp[i][j]=;
for(int i=;i<=maxn;i++)
dp[][i]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=t[i];j++)
{
for(int k=;k<=s[i][j].num;k++)
dp[i][k]=min(dp[i][k],dp[i-][k]+s[i][j].p);
}
}
double ans=;
for(int i=;i<=maxn;i++)
if(ans<(i*1.0)/(dp[n][i]*1.0))
ans=(i*1.0)/(dp[n][i]*1.0);
printf("%.3lf\n",ans);
}
return ;
}

poj 50道dp题的更多相关文章

  1. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  2. java基础50道编程题

    50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...

  3. 最近比赛中遇到的几道dp题

    1.2015 icpc 长春-H-Partial Tree(据说是完全背包,但我觉得不像) 一.题意 给定$n$个点,每一个点$i$的权值为关于度数$d_i$的函数$f(d_i),$让你构建一棵树,使 ...

  4. 50道经典的JAVA编程题(汇总)

    这是一次不可思议的编程历程.从2013年的最后一天开始做这份题,中间连续好几天的考试,包括java考试(今天考试的JAVA编程题),直到今天完成了.挺有成就感的...废话不多说了,来电实质性的吧. 全 ...

  5. 50道经典的JAVA编程题(46-50)

    50道经典的JAVA编程题(46-50),最后五道题了,这是一个美妙的过程,编程真的能让我忘掉一切投入其中,感觉很棒.今天下午考完微机原理了,大三上学期就这样度过了,这学期算是解放了,可是感觉我还是没 ...

  6. 50道经典的JAVA编程题(41-45)

    50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...

  7. 50道经典的JAVA编程题(36-40)

    50道经典的JAVA编程题(36-40),今天晚上心情压抑,不爽,继续做题,管它明天考试,我继续我的java,一个周末都在看微机原理看得的很头疼啊~明天该挂科就挂吧,不在乎了~~~ [程序36] Ar ...

  8. 50道经典的JAVA编程题(31-35)

    50道经典的JAVA编程题(31-35),今天考完了java,在前篇博客里面贴出了题了,见:<今天考试的JAVA编程题>.考完了也轻松了,下个星期一还考微机原理呢,啥都不会,估计今天就做到 ...

  9. 50道经典的JAVA编程题(26-30)

    50道经典的JAVA编程题(26-30),这么晚了,早点睡了要,明早8点考java祝我好运吧!!!晚安~ [程序26]Ex26.java(跳过了,好没意思的题啊)题目:请输入星期几的第一个字母来判断一 ...

随机推荐

  1. 调用网易有道词典api

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): ...

  2. 工具:SVN的Web客户端(ViewVC、SVNWebClient、sventon)和任务管理(Trac、Collaboa)

    http://www.blogjava.net/evanwhj/archive/2006/04/06/39498.aspx 在前面一篇文章中,痛诉了安装ViewVC for Subversion的种种 ...

  3. Fork me on GitHub

    <a href="https://github.com/yadongliang"><img style="position: absolute; top ...

  4. message 弹出窗口

    import  javax.swing.JOptionPane;public class gong {    public static void main(String [] args){      ...

  5. YACC、LEX、JAVACC-------常用的编译工具

    CC(Compiler Compiler) CC的意思就是"编译器的编译器". 你可以定义一种上下文无关文法(CFG),然后针对这个特定的CFG你可以写出一个C程序来解释这种CFG ...

  6. java IO 入门例子

    import java.io.File; /** * File类型基本操作 */ /** * @author Administrator * */ public class FileDemo { /* ...

  7. 设置Adobe Reader打开PDF文件保持记忆功能

    设置Adobe Reader打开PDF文件保持记忆功能 打开菜单“编辑”->“首选项”. 选择种类中的“文档”,在“打开设置”区域勾上“重新打开文档时恢复上次视图设置(R)”,确定之后就可以在下 ...

  8. 在T-SQL语句中访问远程数据库

    1.启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务 ...

  9. new FormData() - FormData对象的作用及用法

    一.概述 FormData 对象的使用: 1.用一些键值对来模拟一系列表单控件:即把form中所有表单元素的name与value组装成 一个queryString 2. 异步上传二进制文件. 二.使用 ...

  10. Model層資料驗證

    概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.Co ...