链接:https://ac.nowcoder.com/acm/contest/186/C?&headNav=www

来源:牛客网
终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了,这可如何是好???这个时候,一个神秘老人走到她面前答应无偿给她武器,但老人有个条件,需要将所选武器分别放在天平的两端,若天平平衡则可以将天平上的所有武器拿走,还好这个天平锈迹斑斑,只要两端重量相差小于等于m就会保持平衡,Alice傻傻的认为越重的武器越好,求Alice最多能拿走的武器总重量。(不限操作次数)

题解:直接dp

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[];
int dp[][];
int main(){
int n,m;
cin>>n>>m;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
memset(dp,-,sizeof(dp));
for(int i=;i<=n;i++)dp[i][]=;
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
dp[i][j]=dp[i-][j];
if(dp[i-][j-a[i]]!=-)dp[i][j]=max(dp[i-][j-a[i]]+a[i],dp[i][j]);
if(dp[i-][j+a[i]]!=-)dp[i][j]=max(dp[i-][j+a[i]]+a[i],dp[i][j]);
}
}
int ans=;
for(int i=;i<=n;i++)
for(int j=-m;j<=+m;j++){
ans=max(ans,dp[i][j]);
}
cout<<ans<<endl;
return ;
}

http://www.hrbuacm.top/problem.php?id=5328

来源:东北四省赛

题意:给n张牌,总体力w,每张牌需要花费wi造成xi的伤害,同时每张牌可能会有两个属性,第一个属性可以在使用时使所有具有第二种属性的牌的w减1,计算最大伤害

样例输入

3 3
3 3 1 1
2 3 1 1
1 3 1 1

样例输出

9
思路:贪心+dp

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>
#include<bitset>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
const int maxn=;
int dp[maxn][maxn],ak[maxn];
struct pot{
int a;
int b;
int c;
int d;
}p[maxn];
bool cmp(struct pot aa,struct pot bb){
if(aa.d==bb.d){
if(aa.c==bb.c)
return aa.a<bb.a;
else return aa.c>bb.c;
}
return aa.d<bb.d;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int n,w;
cin>>n>>w;
for(int i=;i<=n;i++){
cin>>p[i].a>>p[i].b>>p[i].c>>p[i].d;
}
int ans=;
sort(p+,p++n,cmp);
memset(dp,-,sizeof(dp));
dp[][]=;
for(int i=;i<=n;i++){ak[i]=ak[i-]+(p[i].c);}
for(int i=;i<=n;i++){
for(int j=i;j>=;j--){
for(int k=w;k>=;k--){
if(p[i].c){
int xx=max(,p[i].a-j+);
if(k>=xx&&p[i].d&&j&&dp[j-][k-xx]!=-){
dp[j][k]=max(dp[j][k],dp[j-][k-xx]+p[i].b);
}
else if(k>=p[i].a&&j&&dp[j-][k-p[i].a]!=-)dp[j][k]=max(dp[j][k],dp[j-][k-p[i].a]+p[i].b);
}
else{
int xx=max(,p[i].a-j);
if(k>=xx&&p[i].d&&dp[j][k-xx]!=-){
dp[j][k]=max(dp[j][k],dp[j][k-xx]+p[i].b);
}
else if(k>=p[i].a&&dp[j][k-p[i].a]!=-)dp[j][k]=max(dp[j][k],dp[j][k-p[i].a]+p[i].b);
}
ans=max(ans,dp[j][k]);
}
}
}
cout<<ans<<endl;
return ;
}

(注意dp初始化为-1然后设置边界条件为0可以避免出现不存在情况继续向下更新的情况从而避免得到错误结果

两道dp的更多相关文章

  1. 两道DP,四年修一次路

    第十一届:山区修路 题目描述 SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江.B水之间,方圆数千平方公里,相传上古的神医在此搭架上山采药而得名.景区山峰均在海拔3000米以上,堪称" ...

  2. 三十道DP练习(持续更新)(pw:DP)

    前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:201 ...

  3. 【LOJ】#3034. 「JOISC 2019 Day2」两道料理

    LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得 ...

  4. FJOI2020 的两道组合计数题

    最近细品了 FJOI2020 的两道计数题,感觉抛开数据范围不清还卡常不谈里面的组合计数技巧还是挺不错的.由于这两道题都基于卡特兰数的拓展,所以我们把它们一并研究掉. 首先是 D1T3 ,先给出简要题 ...

  5. ACM/ICPC 之 欧拉回路两道(POJ1300-POJ1386)

    两道有关欧拉回路的例题 POJ1300-Door Man //判定是否存在从某点到0点的欧拉回路 //Time:0Ms Memory:116K #include<iostream> #in ...

  6. ACM/ICPC 之 Floyd范例两道(POJ2570-POJ2263)

    两道以Floyd算法为解法的范例,第二题如果数据量较大,须采用其他解法 POJ2570-Fiber Network //经典的传递闭包问题,由于只有26个公司可以采用二进制存储 //Time:141M ...

  7. ACM/ICPC 之 SPFA范例两道(POJ3268-POJ3259)

    两道以SPFA算法求解的最短路问题,比较水,第二题需要掌握如何判断负权值回路. POJ3268-Silver Cow Party //计算正逆最短路径之和的最大值 //Time:32Ms Memory ...

  8. ACM/ICPC 之 两道dijkstra练习题(ZOJ1053(POJ1122)-ZOJ1053)

    两道较为典型的单源最短路径问题,采用dijkstra解法 本来是四道练习题,后来发现后面两道用dijkstra来解的话总觉得有点冗余了,因此暂且分成三篇博客(本篇以及后两篇). ZOJ1053(POJ ...

  9. 两道二分coming~

    第一道:poj 1905Expanding Rods 题意:两道墙(距离L)之间架一根棒子,棒子受热会变长,弯曲,长度变化满足公式( s=(1+n*C)*L),求的是弯曲的高度h. 首先来看这个图: ...

随机推荐

  1. Daily record-July

    July11. Nonsense! 胡说八道!2. Who cares! 谁管你呀!3. It's on me.. 我来付.4. It's a deal. 一言为定.5. I've done my b ...

  2. MATLAB图片折腾1

    MATLAB 把文件夹里图片转成mat文件 pt='/Users/haoyuguo/Desktop/sync1/'; ext='*.jpg'; dis=dir([pt ext]); nms={dis. ...

  3. PC/FORTH 编辑程序

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  4. Android : android 8.0 audio 接口分析

    1.HIDL 的概念 HIDL 读作 hide-l,全称是 Hardware Interface Definition Language.它在 Android Project Treble 中被起草, ...

  5. 7.4 C++标准模板库(STL)的概念

    参考:http://www.weixueyuan.net/view/6401.html 总结:  标准模板库为C++提供了完善的数据结构及算法. 标准模板库包括三部分:容器.算法和迭代器. 容器是对象 ...

  6. HashMap中hashCode()和equals()重要性

    Java中HashMap根据hashCode()和equals()方法来获取键值对的索引,同时也通过这两个方法由key值获取value值.如果没有这两个方法,那么当有两个相同的 hash值时,可能会被 ...

  7. C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序 ...

  8. SharePoint REST API - 基本操作(二)

    博客地址:http://blog.csdn.net/FoxDave 上一节讲了SharePoint REST API的一些基本操作,本节将继续介绍一些关于SharePoint REST API的内容. ...

  9. 强化学习3-蒙特卡罗MC

    之前讲到强化学习可以用马尔科夫决策过程来描述,通常情况下,马尔科夫需要知道  {S A P R γ},γ是衰减因子,那为什么还需要蒙特卡罗呢? 首先什么是蒙特卡罗? 蒙特卡罗实际上是一座赌城的名字,蒙 ...

  10. MVC实现上传图片的方法

    Form提交时,须注意form需要添加属性enctype="multipart/form-data",否则Request.Files.Count=0,无法上传图片. cshtml代 ...