【hdu 6082 度度熊与邪恶大魔王 】 完全背包
hdu 6082
这道题一拿过来 对一个熊直接跑完全背包 然后跑 100000 次 完美TLE
其实因为对一个熊跑的时候 下次熊还是会跑的
于是需要对所有的熊直接完全背包预处理
设 dp[i][j] 代表 消灭护甲为 i 血量为 j 的怪兽的最小代价
那么只要O(n) 遍历这些怪兽是否能被消灭即可
/*if you can't see the repayWhy not just work step by steprubbish is relaxedto ljq
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;#define dbg(x) cout<<#x<<" = "<< (x)<< endl
#define dbg2(x1,x2) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<endl
#define dbg3(x1,x2,x3) cout<<#x1<<" = "<<x1<<" "<<#x2<<" = "<<x2<<" "<<#x3<<" = "<<x3<<endl
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))typedef pair<int,int> pll;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int _inf = 0xc0c0c0c0;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const ll _INF = 0xc0c0c0c0c0c0c0c0;
const ll mod = (int)1e9+7;ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll ksm(ll a,ll b,ll mod){int ans=1;while(b){if(b&1) ans=(ans*a)%mod;a=(a*a)%mod;b>>=1;}return ans;}
ll inv2(ll a,ll mod){return ksm(a,mod-2,mod);}
void exgcd(ll a,ll b,ll &x,ll &y,ll &d){if(!b) {d = a;x = 1;y=0;}else{exgcd(b,a%b,y,x,d);y-=x*(a/b);}}//printf("%lld*a + %lld*b = %lld\n", x, y, d);/*namespace sgt
{#define mid ((l+r)>>1)#undef mid
}*/
const int MAX_N = 1025;
int a[100025],b[100025],k[MAX_N],p[MAX_N],dp[11][MAX_N];
int main()
{//ios::sync_with_stdio(false);//freopen("a.txt","r",stdin);//freopen("b.txt","w",stdout);int n,m;while(scanf("%d%d",&n,&m)==2){bool flag = true;int mxa = 0,mxb = 0;long long ans = 0;for(int i = 1;i<=n;++i)scanf("%d%d",&a[i],&b[i]),mxa = max(mxa,a[i]),mxb = max(mxb,b[i]);for(int i = 1;i<=m;++i)scanf("%d%d",&k[i],&p[i]);memset(dp,0x3f,sizeof(dp));for(int i = 0;i<=mxb;++i) dp[i][0] = 0;for(int i = 0;i<=mxb;++i){for(int j = 1;j<=m;++j){if(p[j]-i<=0) continue;for(int l = 1;l<=mxa;++l){if(l-(p[j]-i)>=0) dp[i][l] = min(dp[i][l],dp[i][l-(p[j]-i)]+k[j]);else dp[i][l] = min(dp[i][l],dp[i][0]+k[j]);}}}for(int i = 1;i<=n;++i){if(dp[b[i]][a[i]]==inf) flag = false;else ans+=dp[b[i]][a[i]];}if(flag) printf("%lld\n",ans);else printf("-1\n");}//fclose(stdin);//fclose(stdout);//cout << "time: " << (long long)clock() * 1000 / CLOCKS_PER_SEC << " ms" << endl;return 0;
}
【hdu 6082 度度熊与邪恶大魔王 】 完全背包相关推荐
- HDU 6082 度度熊与邪恶大魔王 (完全背包)
度度熊与邪恶大魔王 Time Limit: 2000/1000 MS ( ...
- HDU - 6082 度度熊与邪恶大魔王(背包变式)
度度熊与邪恶大魔王 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式,第i种攻击方式,需 ...
- HDU - 6082——度度熊与邪恶大魔王 (背包+DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6082 思路:dp[i][j]代表打死血量为i,防御力为j的怪兽要用的最少晶石.用背包的方式dp. #i ...
- HDU 6082 度度熊与邪恶大魔王(01背包)
Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式,第i种攻击方式 ...
- HDOJ 6082 度度熊与邪恶大魔王
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6082 百度之星2017资格赛的第三题. 自从从集训队退出之后,就再也没有做过题目了,当天晚上突然看到短 ...
- [HDU P6082]度度熊与邪恶大魔王
原题链接 有点意外的DP 其实一开始的思路也是背包 但是思考方向的不对 后来看了题解 就是 DP[i][j]表示在防御力为i的情况下打出j点伤害所需的最小晶石数 枚举魔法的时候 如果直接能打掉就用这招 ...
- 百度之星2017资格赛 1003 度度熊与邪恶大魔王 完全背包
定义状态dp[i][j][t]代表前i种攻击,当前怪物生命值为j,防御力为t,所需要的最小代价. 利用完全背包的方法很容易得到 (p[i] = 第i种方法的攻击值减去防御值t) dp[i][j][t] ...
- 2017百度之星资格赛:1003. 度度熊与邪恶大魔王
度度熊与邪恶大魔王 Accepts: 1288 Submissions: 7716 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
度度熊与邪恶大魔王 Time limit:1000 ms Memory limit:65536 kB Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来.邪恶大 ...
最新文章
- CentOS yum 源的配置与使用
- linux网络配置和防火墙配置一例
- java中nio怎么实现聊天,JAVA-NIO实现聊天室详细代码说明
- cma检测_CMA检测方法
- greenfoot推箱子游戏_推箱子小游戏V2.0更新
- java操作ssdb:set、map、list..
- 加入收藏 设为首页 代码:兼容IE和FireFox
- C++ Primer 第十三章 拷贝控制
- 2020-06-05 原始套接字/AF_PACKET链路层访问
- 【一天一个C++小知识】003.C++中的void指针类型
- 网站加速--Cache为王篇
- spark学习7之IDEA下搭建Spark本地编译环境并上传到集群运行
- a4如何打印双面小册子_a4如何打印双面小册子
- 一文带你认清运维岗位
- 获取设备唯一编号替代IMEI新方案
- 失传千年AE特效真经(二)
- mysql查询bom清单_Oracle EBS-SQL (BOM-12):BOM清单查询
- dva Reducers与Effects的使用介绍
- 联发科MT6797/x20开发板设计,MT6797方案定制,MT6797芯片模块资料
- Oracle19c数据库如何冷备份,Oracle数据库的备份方法-冷备份(转)