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. 深入浅出Java垃圾回收机制(一)(转载)

    转载来做笔记的:原文地址:http://www.importnew.com/1993.html. 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲 ...

  2. 【laravel5.4+vue.js】laravel 循环三维数组,解决:htmlentities() expects parameter 1 to be string, array given

    laravel循环三维数组   +++   vue.js循环三维数组  (数据均是以三维数组形式存在的) <form-item label="权限名称" prop=" ...

  3. HDUOJ-----4510 小Q系列故事——为什么时光不能倒流

    小Q系列故事——为什么时光不能倒流 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

  4. leetcode185 Department Top Three Salaries

    Employee表存储员工姓名.员工所在公寓.员工工资 Department表存储公寓id 评选出各个公寓的工资前三名的员工. 遇到的问题如下: limit,in等语句不能用在嵌套select语句中, ...

  5. Oracle查询结果中:一列中相同的值或一列中重复的值,只显示一次

    http://www.itpub.net/thread-1768915-1-1.html 问题: CREATE TABLE test(ob_id VARCHAR(32),ob_name VARCHAR ...

  6. Oracle Explain Plan,hint解释与示例

    Oracle 专业dba博客:http://blog.csdn.net/tianlesoftware Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响S ...

  7. Eclipse 选中变量高亮显示设置

  8. js重要函数

    window.setTimeout(code,millisec)   方法用于在指定的毫秒数后调用函数或计算表达式.只执行 code 一次(比如某个界面是上左右的三个frame界面,右边这个界面要调用 ...

  9. Android开发之5大布局方式详解

    Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(Tabl ...

  10. JMeter学习笔记---作用域规则

    JMeter测试树中既包含遵循分层规则的测试元件(监听器.配置元件.后置处理器.前置处理器.断言.定时器),又包含遵循顺序规则的测试元件(逻辑控制器.采样器),测试人员创建测试计划的同时,实际上就创建 ...