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. hmac库 密钥相关的哈希运算消息认证码

    # -*- coding: cp936 -*- #xiaodeng #python 2.7.10 #HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一 ...

  2. glusterFS的部署流程

    转自:http://www.cnblogs.com/terrycy/p/5915263.html GlusterFS简单配置   1.准备工作 准备三台机器(物理机或者虚拟机均可)用于安装和测试Glu ...

  3. (二)Linux Shell编程——运算符、注释

    2.7 Shell运算符 Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符.原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...

  4. jsp中Undefined type: xxxx...

    在测试jsp的动作元素<jsp:useBean >时,写了一个计数器的栗子: JavaBean: package com.pers.count; /** * @author liangya ...

  5. LevelDB场景分析4--BackgroundCompaction

    1.DBImpl::Open      uint64_t new_log_number = impl->versions_->NewFileNumber();      WritableF ...

  6. ASP.NET自定义Web服务器控件-DropDownList/Select下拉列表控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  7. jpa 批量插入

    @Override @Transactional public <S extends E> List<S> save(Iterable<S> entities) { ...

  8. selenium grid2 使用远程机器的浏览器

    下载 selenium-server-standalone-3.4.0.jar包 在selenium-server-standalone-3.4.0.jar包目录下面执行cmd 命令 java -ja ...

  9. Logstash怎么导入csv

    Logstash.Conf input { file { type => "SSRCode" path => "E:/FTPRootWorkSpace/SD/ ...

  10. ASP.NET MVC 操作AD 获取域服务器当前用户姓名和OU信息

    #region 根据当前登录域账号 获取AD用户姓名和所在OU目录 /// <summary> /// 根据当前登录域账号 获取AD用户姓名和所在OU目录 /// </summary ...