hdu 3646
DP 状态转移方程还是比较容易想到 关键问题是当前要攻击的怪兽的血量
dp[i][j] = max(dp[i-1][j]+第i只鸟不使用double可杀死的怪兽数, dp[i-1][j-1]+第i只鸟使用double可杀死的怪兽数)
dp[i][j]指前i只鸟使用j次double可杀死的怪兽数
要将m更新为m,n中的较小值 因为最多使用n次double 因为这个一直wa
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int dp[10010][110],rest[10010][110];
int ac[10010],bc[100010],n,m,k;
int cc(int acc, int &bcc, int now)
{
int flag = 1;
while(now < k)
{
if(acc > bcc)
{
acc -= bcc;
now++;
bcc = bc[now+1];
flag = 0;
}
else if(acc == bcc)
{
now++;
bcc = bc[now+1];
break;
}
else if(flag)
{
bcc -= acc;
break;
}
else
break;
}
return now;
} int main()
{
while(scanf("%d%d%d",&n,&m,&k) == 3 && n+m+k)
{
for(int i = 1; i <= n; i++)
scanf("%d",&ac[i]);
for(int i = 1; i <= k; i++)
scanf("%d",&bc[i]);
memset(dp, 0, sizeof(dp));
m = min(m, n);
rest[0][0] = rest[0][1] = bc[1];
for(int i = 1; i <= n; i++)
{
int res = rest[i-1][0];
dp[i][0] = cc(ac[i], res, dp[i-1][0]);
rest[i][0] = res;
for(int j = 1; j <= min(m, i); j++)
{
int res1 = rest[i-1][j], res2 = rest[i-1][j-1];
int k1 = cc(ac[i], res1, dp[i-1][j]), k2 = cc(ac[i]*2, res2, dp[i-1][j-1]);
if(k1 > k2)
{
dp[i][j] = k1;
rest[i][j] = res1;
}
else if(k1 < k2)
{
dp[i][j] = k2;
rest[i][j] = res2;
}
else
{
dp[i][j] = k1;
rest[i][j] = min(res1, res2);
}
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}
hdu 3646的更多相关文章
- poj和hdu部分基础算法分类及难度排序
最近想从头开始刷点基础些的题,正好有个网站有关于各大oj的题目分类(http://www.pythontip.com/acm/problemCategory),所以写了点脚本把hdu和poj的一些题目 ...
- 【hdu 1527】取石子游戏
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
随机推荐
- IIS服务器应用程序不可用的解决办法
转载:http://www.cnblogs.com/caicainiao/archive/2010/11/29/1891085.html 这个问题见了好几次,在.net下 Microsoft visu ...
- Linux内核中影响tcp三次握手的一些协议配置
在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...
- Convert Windows 32bit dirver to Windows 64bit
Pre-condition: 1.source code(vc6.0+WDK based) Development environment: 2.VS2013 3.WDK 8/8.1 Steps: 1 ...
- ios 微信细节
1.登录后,下次登录保存其用户名. * 官方的登录实现 * 1.把用户名和密码放在沙盒 NSString *user = self.userField.text; NSStri ...
- 【转】 SqlServer性能检测和优化工具使用详细
http://blog.csdn.net/dcx903170332/article/details/45917387
- (转)理解SQL SERVER中的分区表
简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...
- html笔记——网页中视频播放,文字滚动
转载地址:http://blog.chinaunix.net/uid-191945-id-2792153.html <代码1无限次播放> <EMBED src="地址&qu ...
- 【转】揭开Socket编程的面纱
对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP?2. Sock ...
- SMB/CIFS协议解析一概述
一.SMB/CIFS协议的区别 在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协 议,Microsoft ...
- 把div固定在网页顶部
很多网站都有把某一块固定在顶部的功能,今天上网搜搜然后自己又写了一遍,贴出来给大家看看,哪天用到的时候自己也可以随时看看 <!DOCTYPE html PUBLIC "-//W3C// ...