链接: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. AttributeError: 'cx_Oracle.Cursor' object has no attribute 'numbersAsStrings'

    转载自:https://www.wengbi.com/thread_77579_1.html 最近在本地搭建Django开发环境,Django 1.11,python 2.7.11,数据库Oracle ...

  2. Fedora防火墙配置

    简介: Fedora 18以及之后的版本,防火墙的管理不再基于iptables,而基于firewall的东西.firewall的功能相对复杂一些,可以控制服务,控制端口,设置安全区域,设置端口转发等功 ...

  3. javascript进阶笔记(2)

    js是一门函数式语言,因为js的强大威力依赖于是否将其作为函数式语言进行使用.在js中,我们通常要大量使用函数式编程风格.函数式编程专注于:少而精.通常无副作用.将函数作为程序代码的基础构件块. 在函 ...

  4. ADO.NET 连接池 Session 状态分析

    ADO.NET 中提供连接池避免 在业务操作中频繁打开,关闭连接. 当客户端释放连接后,连接池并未真正将数据库连接资源释放 , 而是根据连接字符串特征,将资源放到连接池中, 方便下次重用. 因此问题来 ...

  5. js重写trim()方法

    最近项目中出现去空格的需求,我本地是IE11,使用trim()函数的时候,是无法识别的.因此重写String的trim()方法. 1.要求 可以去除首位全角,半角空格. 2.对   能去除所有 Str ...

  6. 10.Python-第三方库requests详解(二)

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  7. excel的操作

    python可以对excel进行写的操作,读的操作和修改的操作,做不同的功能需要导入不同的模块 1.对 excel进行写的操作 import xlwt book=xlwt.Workbook() #新建 ...

  8. android-DNS服务找不到

    1.重启eclipse 2.重新建立AVD 3.在建立AVD时sd卡数值不要填

  9. python 一行代码字符串转字典方法

    b = 'bid=Qzw9cKnyESM; ll="108288"; __yadk_uid=4YChvgeANLBEh4iV00n1tc0HQ8zpmSl1; __utmc=301 ...

  10. Day5作业及默写

    1,有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": [&q ...