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 ...
随机推荐
- 和阿文一起学H5-- H5排版八大套路
二.中心型 三.倾斜型 四.三角形 5.全图形 6.渐变型 7.蒙版型 \ 8.骨骼型 实例
- python学习day4--python基础--元组,字符串
1.元组 #只读列表,元组,当希望生成后不被修改则用元组 r=(1,2,3,4,5) 元组 2.字符串,python字符串操作非常丰富,编程时可先查询python本身是否已设计了相关函数 #移除空白 ...
- Eclipse插件checkstyle 代码风格的检查
插件checkstyle 的安装 方法一: 1.Eclipse中,选择Help->Software Updates->Find and Install 2.选择 Search for ...
- APC -- Asynchronous Procedure Call 异步过程调用
异步过程调用(APC -- Asynchronous Procedure Call )是一种与常用的和简单的同步对象不同的一种同步机制. 我们在我们线程里使用基本的同步对象如MUTEX去通知其它线程, ...
- java小经验
从事互联网金融,常常会碰到文件处理,以前都是傻傻的解析,这次我不想这么傻了,做个小小的封装,咱也以oop的思想来完成. 文件解析处理一般分两种模式:分隔符与定长,目前工作五年也就这两种. 封装思想: ...
- (转)卸载和安装LINUX上的JDK
卸载默认的: 用root用户登陆到系统,打开一个终端输入 # rpm -qa|grep gcj 显示内容其中包含下面两行信息 # java-1.4.2-gcj-compat-1.4.2.0-27jpp ...
- CSS 初体验之一
层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式. 1.首先先看盒装模型,如下图,平时设置的width,height是指元素内容(con ...
- spring读取prperties配置文件(2)
接上篇,spring读取prperties配置文件(1),这一篇主要讲述spring如何用annotation的方式去读取自定义的配置文件. 这里我先定义好属性文件"user.propert ...
- bzoj3315:[Usaco2013 Nov]Pogo-Cow
思路:首先可以写出n^3dp的状态转移方程:f[i][j]=max{f[j][k]+val[i]},f[i][j]表示最后一步跳到点从j点跳到i点的最大价值(状态不能设成f[i],因为j对后面的决策是 ...
- Access数据库一种树形结构的实现和子节点查询
BOOL CManageDataBase::GetDepTreeAllSons( int rootItem ) { CADORecordset Rst(&m_DataBase); BOOL b ...