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. Linux下umask的缺省默认权限

    Linux有缺省默认文件.文件夹权限umask.默认 777 -xxx(文件夹)  666 - xxx(文件) 11.查看当前用户umask R(4)--W(2)--X(1) [root@mvpban ...

  2. 转:eclipse里面显示中文乱码

    显示中文会变成乱码解决方案:Windows- >Pereferences- >General->Workspace- >Text   File   Encoding   选项下 ...

  3. 【vue.js】windows下安装vue.js

    windows下搭建vue开发环境 Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常 ...

  4. windows系统定时重启自定义exe程序

    工作需要, Windows系统定时重启自定义exe程序. 写了如下程序, 按照说明(readme.txt)修改批处理文件中的四个参数即可: 1.readme.txt 第一个参数:进程名(不用带exe) ...

  5. HDUOJ---1996汉诺塔VI

    汉诺塔VI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. leetcode679:24Game

    题目链接 考虑1,5,5,5这种情况,有:5*(5-1/5)=24所以除法必须自定义运算才行. class Num: def __init__(self,up,down=1): self.up=up ...

  7. C1控件的破解步骤

    最近接触了一个系统中的打印和报表控件用到了C1控件,控件在以前就注册了的,可是在这次修改了系统后,系统却提示C1的控件没有注册. 怎么回事呢?我们这次并没有修改报表,而且也没有和C1控件相关的改动.怎 ...

  8. python练习笔记——计算1/1-1/3+1/5-1/7……的和

    1 / 1 - 1 / 3 + 1 / 5 - 1 / 7 + ....求100000个这样的分式计算之为是多少?将此值乘以4后打印出来,看看是什么? num_list = [] count = -1 ...

  9. 使用Xcode、Android Studio将项目链接到Git

    一.使用Android Studio创建本地git仓库: 1.检查本地git环境:在Android Studio中setting-->Version Control 点击Test按钮,提示suc ...

  10. tomcat支持https的历程

    tomcat真是业界良心啊,文档写的详细无比. 一.https是什么? 简单的说,就是http+SSL/TLS 协议还是http,但是在传输层过程中使用了加密(涉及握手.秘钥分发.加密.解密等过程). ...