链接:http://poj.org/problem?id=1036

题意:

有个伸缩门,大小在[0,k]内变动,在每个状态处,门的大小既可以 +1 或者 -1,且初始时是在0处,现在有n个高贵度,身材和到来时间不尽相同的人来饭店,求怎样安排门的变化使得能够进去的人的高贵度之和最大;

思路:

比较常见的一种动规,从N个点中选出任意个点,使其价值最大;

先按时间或其他顺序排序,使数据有序化,然后f[i]代表选择该点最大可得到的价值,通过枚举前一个选择的点来得到f[i]的值;

状态方程:dp[i][j]=max(dp[i+1][j],dp[i+1][j-1],dp[i+1][j+1]);

这类选择类的DP基本都这样,唯一要注意的是,这类题目中,最终阶段保存的结果不一定就是最优结果

View Code

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5
 6 const int N=102;
 7 const int T=30002;
 8 int dp[2][N];
 9 bool mark[T];
10
11 struct Gan
12 {
13     int t, p, s;
14 }g[N];
15
16 inline int Max( int a, int b )
17 {
18     return a>b?a:b;
19 }
20
21 int main( )
22 {
23     int n, k, m;
24     while(scanf( "%d%d%d", &n,&k, &m )==3){
25         memset( mark, 0, sizeof mark );
26         for( int i=1; i<=n; ++ i ){
27             scanf( "%d", &g[i].t );
28             mark[g[i].t]=1;
29         }
30         for( int i=1; i<=n; ++ i ){
31             scanf( "%d", &g[i].p );
32         }
33         for( int i=1; i<=n; ++ i ){
34             scanf( "%d", &g[i].s );
35         }
36         memset(dp, 0, sizeof(dp));
37         for( int i=0;i<=m; ++ i ){
38             for( int j=0; j<=i&&j<=k; ++ j ){
39                 int w=0;
40                 if( mark[i] ){
41                     for( int l=1; l<=n; ++ l ){
42                         if( g[l].s==j&& g[l].t==i ){
43                             w+=g[l].p;
44                         }
45                     }
46                 }
47                 if( j==0 )dp[i%2][j]=Max( dp[1-i%2][j], dp[1-i%2][j+1] );
48                 else if( j==k ) dp[i%2][j]=Max( dp[1-i%2][j], dp[1-i%2][j-1] );
49                 else dp[i%2][j] = Max(Max(dp[1-i%2][j], dp[1-i%2][j-1]), dp[1-i%2][j+1]);
50                 dp[i%2][j] += w;
51             }
52         }
53         int ans=0;
54         for( int i=0; i<=k; ++ i ){
55             if(ans<dp[m%2][1])ans=dp[m%2][i];
56         }
57         printf( "%d\n", ans );
58     }
59
60     return 0;
61 }

转载于:https://www.cnblogs.com/jian1573/archive/2013/01/14/2860253.html

poj1036GangstersDP相关推荐

最新文章

  1. 格式化输入输出(待更新)
  2. SQL Server 2008 阻止保存要求重新创建表的更改
  3. 解决无法将自己github上的代码clone到/usr目录下的问题
  4. mysql-用正则表达式进行搜索
  5. LeetCode 1759. 统计同构子字符串的数目
  6. 腾讯技术峰会:从模型部署到算法应用,云计算时代下的人工智能
  7. 【笔记】UL/DL(上行/下行)方向上每个符号IQ的时序关系(U平面和C平面)
  8. Python使用递归法和函数式编程计算整数各位之和
  9. UVA 11235 - Frequent values
  10. i计算机网络的应用程序,计算机网络技术及其在校园网的研究与应用毕业论文.doc...
  11. 【最佳实践】【Blend】Triggers、Actions 和 Behaviors
  12. 苹果Mac上好用的分屏软件:Magnet
  13. ce修改植物大战僵尸之修改阳光值
  14. 阿里、百度、腾讯招聘 Java 程序员的技术标准,你达到要求了吗?
  15. javascript基础常识问答(六)
  16. xss靶场练习(一)之xss.haozi.me
  17. 当你第一次发送ping请求包,ARP缓存表为空时会发生什么?(详细解析全过程)
  18. 数显之家快讯:【SHIO世硕心语】真正的高手,都有7个思维习惯
  19. 前端可视化技术-笔记
  20. Word中设置论文参考文献对齐方法

热门文章

  1. 东航期货模拟交易brockerid(期货公司的客户号)
  2. 精心准备了10个行业30张大屏模板,0代码直接套用
  3. 一次完整的数据分析实战!仅用4步,效率吊打Excel和Python
  4. mysql创建存储过程意义_浅谈一下mySql中创建存储过程
  5. dom4j获取指定节点值_XML解析之DOM4j以及XPATH技术
  6. ctf题目:看不见的flag_记一次江西省信息安全线下CTF比赛
  7. python中完整类的定义_详解Python中类的定义与使用
  8. 博文翻译系列——如何入门数据科学 without spending a penny
  9. 【文献阅读】Densely Connected Convolutional Networks-best paper-CVPR-2017
  10. 实验5.3 编程实现两字符串的连接(使用字符数组)