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. KnockoutJS + My97DatePicker b

    如何将Knockoutjs和其他脚本库结合使用?这里给出一个Knockoutjs与my97datepicker配合使用的例子,例子中使用了ko的自定义绑定功能: ko.bindingHandlers. ...

  2. Java多线程系列目录(共43篇)(转)

    Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html

  3. Linux文件大小排序

    ls 文件详情 ls   -S /            ###从大到小排序ls   -Sr /          ###从小到大排就加个-r     -r 翻转ls   -aSr /         ...

  4. Js操作Select大全(取值、设置选中等等)

    jquery操作select(取值,设置选中) 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selecto ...

  5. RHCE7 管理II-4计划将来的Linux任务

    (1) at 一次性的计划任务 语法: # at [参数] [时间] at> 执行的指令 退出at命令 ctrl+d [root@localhost ~]# at now at> mkdi ...

  6. Linux时间子系统(三) 用户空间接口函数

    一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: 1.和系统时间相关的服务.例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时). 2.让进程睡眠一段时间 3. ...

  7. EF相同Context升级为分布式事务的原因

    http://www.digitallycreated.net/Blog/48/entity-framework-transactionscope-and-msdtc

  8. Python2 元组 cmp() 方法

    描述 Python2 元组 cmp() 方法用于比较两个元组,如果 T1< T2返回 -1, 如果 T1== T2返回 0, 如果 T1> T2返回 1. 语法 cmp() 方法语法: c ...

  9. libiconv字符集转换库在C#中的使用

    <libiconv字符集转换库用法>一文中说到了libiconv能够实现不同字符集的转换. 比方GBK转BIG5等.在项目中由于须要,找到这个库.但是这个库在C#中没有非常好的支持.只是, ...

  10. 什么是BGP线路?什么是BGP机房?

    BGP(Border Gateway Protocol,边界网关协议)主要用于互联网AS(自治系统)之间的互联.BGP的最主要功能在于控制路由的传播和选择最好的路由.BGP是Internetproje ...