这些时间vj上做的部分题目

HDU5115

题意:第一行t,t组测试数据,每组数据第一行输入n表示n匹狼,第二行给出一个序列表示每匹狼的伤害,第三行给出每匹狼能给周围狼的伤害增幅,求怎样打可以得到最小伤害。
思路:区间dp问题dp[i][j]为消灭i到j只狼的代价,枚举k作为最后一只被杀死的狼,此时会受到a[k]和b[i-1] b[j+1]的伤害 取最小的即可列出转移方程:dp[i][j]=Min(dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1])。
代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int a[310],b[310],dp[310][310];
int main()
{int t,cas=1;cin >> t;while(t--){int n;cin >> n;for(int i=1; i<=n; i++)cin >> a[i];for(int i=1; i<=n; i++)cin >>b[i]);b[0]=b[n+1]=0;memset(dp,0,sizeof(dp));for(int i=1; i<=n; i++)for(int j=i; j<=n;j++)dp[i][j]=inf;for(int len=1; len<=n;len++){for(int i=1;i<=n-len+1; i++){int j=i+len-1;for(int k=i; k<=j;k++)dp[i][j]=min(dp[i][j],dp[i][k-1]+a[k]+dp[k+1][j]+b[i-1]+b[j+1]);}}printf("Case #%d:%d\n",cas++,dp[1][n]);}return 0;
}
POJ3280 Cheapest Palindrome

题意:给定一个字符串,让你用最小的代价使它成为一个回文串
思路:区间dp问题,具体看代码
代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dp[2020][2020], x, y, cost[30];
char s[2020];
int n, m;
int main(){while (cin>>n>>m)){cin >> s;memset(dp, 0, sizeof(dp));char ss[10];for (int i = 0; i < n;i++){int x, y;cin >> ss >> x >> y;cost[ss[0]-'a'] = min(x, y);}for (int i = 1; i < m;i++)for (int j = i-1; j >=0; j--){dp[j][i] = min(dp[j+1][i] + cost[s[j]-'a'], dp[j][i-1] + cost[s[i]-'a']);if (s[i] == s[j])dp[j][i] = min(dp[j][i], dp[j + 1][i - 1]);}Cout << dp[0][m - 1] <<endl;}return 0;
}
HDU4632 Palindrome subsequence

题意:找一个字符串里有多少个回文子序列
思路:区间dp问题,找回文子序列,i到j区间内的种类数可以由i+1 - j和i - j-1这两步推,但是在这一个步骤中i+1 - j-1 这段区间重复了两次,需要减去;如果i和j点的字母相同的话,意味着这两个点符合回文,所以直接考虑i+1 - j-1这个区间。具体看代码
代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
using namespace std;
#define inf 0x3f3f3f3f
#define mod 10007
int dp[1010][1010];
char s[1010];
int main()
{int t,cas=1;cin>>t;while(t--){cin>>s;int len=strlen(s);memset(dp,0,sizeof dp);for(int i=0;i<len;i++)dp[i][i]=1;for(int j=0;j<len;j++)for(int i=j-1;i>=0;i--){dp[i][j]=(dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1]+mod)%mod;if(s[i]==s[j])dp[i][j]=(dp[i][j]+dp[i+1][j-1]+1)%mod;}printf("Case %d: %d\n",cas++,dp[0][len-1]);}return 0;
}
ZOJ3623 Battle Ships

题意:多组测试数据,第一行输入战舰种类数N,防御塔生命L,下面N行每行输入生产时间和伤害,问玩家击毁防御塔的最少时间
思路:这是一个完全背包问题,dp时间,dp[i]表示i秒之前最大伤害,套一下完全背包模板就可以。
代码:

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int dp[10010];
int t[10010],p[10010];
int main()
{int n,m;while(cin>>n>>m){for(int i=1; i<=n; i++)cin >> t[i] >> p[i];memset(dp,0,sizeof(dp));for(int i=1; i<=n; i++)for(int j=0; j<500; j++)dp[j+t[i]]=max(dp[j+t[i]],dp[j]+j*p[i]);for(int i=0; i<500; i++)if(dp[i]>=m){cout << i <<endl;break;}}return 0;
}
HDU3466 Proud Merchants

题意:多组测试数据,第一行输入物品数目n和拥有金钱数目m,后面n行每行输入价格p、要买的最少拥有金钱q,价值v,求能买最大价值。
思路:一道蛮好的01背包题目,有个点在于排序,因为他有限定条件需要钱数大于q才能买,所以要先排序,按照q-p排序,为啥要按照这个,首先看,假设A物品p1,q1,v1,,B物品p2,q2,v2,先买A物品的话你需要p1+q2块钱,先买B的话需要P2+q1块钱,如果先买A需要的钱少的话就有这么一个式子p1+q2<=p2+q1,然后移项的p1-q1<=p2-q2,这时候就能看出到底应该怎样排序了。
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[10010];
struct node
{int p,q,v;
} a[1010];
bool cmp(nodea,node b)
{return a.q-a.p<b.q-b.p;}
int main(void)
{int n,m;while(cin>>n>>m){memset(dp,0,sizeof(dp));for(int i=0; i<n; i++)cin >> a[i].p >> a[i].q >> a[i].v;sort(a,a+n,cmp);for(int i=0; i<n; i++)for(int j=m; j>=a[i].q; j--)dp[j]=max(dp[j],dp[j-a[i].p]+a[i].v);cout << dp[m] <<endl;}return 0;
}
HDU 1114 Piggy Bank

题意:T组测试数据,存钱罐可以往里面放一些价值小的钱,给出空罐子的重量和最满能装到多重,然后给出每种硬币的价值和重量,我们要在不打破它的情况下确认罐子里最少有多少钱。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 10010
int dp[10010];//dp[i]表容量为i的时候所装东西的最小价值
int main()
{int w1,w2;//空罐子,装硬币罐子int p,w;//价值,重量int t,n;//样例数,硬币种类cin >> t;while(t--){cin >> w1 >> w2 >> n;for(int i=1;i<=w2-w1;i++)dp[i]=INF;//初始化为无穷大dp[0]=0;while(n--){cin >> p >> w;for(int i=w;i<=w2-w1;i++)if(dp[i]>dp[i-w]+p)dp[i]=dp[i-w]+p;}if(dp[w2-w1]==INF) printf("This is impossible.\n");elseprintf("The minimum amount of money in the piggy-bank is %d.\n",dp[w2-w1]);     }    return 0;
}
HDU1171 Big Event in HDU

题意:多组测试数据,n<=0结束输入,每组样例先输入一个n表示物品种类,后面n行每行给出物品价值和数目,求怎样把这些物品分成两半,使这两半物品的价值差最小。
思路:这道题可以看成01背包来做,可以直接从总价值/2开始dp,01背包的模板稍微变一下型就可以
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int v[1008611];//价值
int num[1008611];//数目
int dp[1008611];
int main()
{int n,sum,c;while(cin>>n&&n>0){sum=0;memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){cin >> v[i] >> num[i];sum += (v[i]*num[i]);//计算总价值}c = sum/2;//总价值的一半/*下面是01背包做法,套一下模板即可*/for(int i=0;i<n;i++)for(int k=0;k<num[i];k++)for(int j=c;j>=v[i];j--)dp[j]=max(dp[j],dp[j-v[i]]+v[i]);cout<<sum-dp[c]<<" "<<dp[c]<<endl;}
}

这段时间做的简单dp题目(部分)相关推荐

  1. python编写程序题目_让我们一起来写python程序,做些简单的题目

    题目:企业发放的奖金根据利润提成.利润(s)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%:20万到40万 ...

  2. UVA dp题目汇总

    UVa专题练习 A-4 10003 经典dp,可用四边形不等式优化 10029 基础dp,DAG最长路,需高效构图 10032 经典问题.子集和数问题.01背包问题 10036 能否在一个整数序列的每 ...

  3. YOLOv5初探(看来这个YOLO5做得还不是很完善,过段时间再试试??)

    文章目录 YOLOv5简介 官方github链接 如何安装以及训练自己的数据集 安装 训练 1.创建Dataset.yaml文件 2.创建存放图片和标注的目录 3.创建标注labels 4.选择预训练 ...

  4. 前端岗位初入职场后的最初一段时间需要做什么

    文章题目有点长,叫 <前端岗位初入职场后的最初一段时间需要做什么>,说下写这篇文的初衷,在前端自学团里有很多刚毕业或者是刚从培训班出来的同学,在群里天天讨论着找工作和面试的事情,面试的题在 ...

  5. 普歌-允异团队-【Java实例】一起做一个简单的王者荣耀RPG吧!从设计思路到代码实现一条龙!-登录与注册(IO流)/记录时间/属性面板呈现

    [Java实例]-王者荣耀RPG-从设计思路到代码实现 前言 一.案例分析 1. 设计理念 2. 功能设计 (1)登录与注册 (2)游戏时间记录 (3)选择游戏模式 (4)游戏地图 (5)生物属性 二 ...

  6. 我做PM(项目经理)这段时间...

    做项目管理系统PM这段时间,每天都很忙,也没有太多的时间总结自己的所思所想,今天顺便整理一下最近的感悟. 1.招标之前所有需要做的工作以及公司的要求都要有个大概的认识,不能偏差太大,太大不容易控制.( ...

  7. 2020 用html做一个简单的时间显示(12小时制)

    用前端html做一个简单的时间显示(12小时制) 如图所示 显示年月日.时间.上下午以及星期几 功能: 1. 此代码解决时间比如秒数 为单数时,在前面补0 //值小于10时,在前面补0 functio ...

  8. 我做游戏交互实习这段时间,总结了这8个点

    1.理解并且快速学习 我所负责的是一款卡牌养成收集类的二次元游戏,一开始可能做游戏交互可能对很多游戏的特定名称不理解,也会有一些特殊的游戏类型,例如MOBA.FPS等.当一开始知道负责的是二次元游戏的 ...

  9. Java利用键盘接收来做简单的题目

    利用键盘接收来做简单的题目 键盘接收:其实意思就是你想要的值在输出窗口,用键盘输入进去,输入进去的字符都是以绿色显示. 首先要调用 import java.util.Scanner; 然后在main方 ...

最新文章

  1. 一起谈.NET技术,Visual Studio 2010 中的代码约定设置
  2. sublime编写python路径报错怎么改_sublime开发Python的编码问题
  3. 牛客多校4 - Count New String(序列自动机+广义后缀自动机)
  4. 电脑常见故障处理_彩超常见故障及维修
  5. 公司裁员优先裁掉这类员工
  6. 行政职业能力测试软件,公务员行政职业能力测试考试宝典
  7. C++---string类接口整理与深浅拷贝
  8. 哪一瞬间让你下定决心减肥,并且坚定不移的执行,最终瘦身成功?
  9. [ubuntu] duplicated values in $PATH
  10. HTTP 请求返回代码含义
  11. 解码隆基模式:光伏企业的百亿成长之路
  12. linux安装7z命令,Linux 下安装 7zip 及使用
  13. ppt流程图箭头分叉_箭头循环图ppt模板_PPT结构图制作中箭头跟着目标走的技巧_ppt箭头流程图模板_ppt箭头循环图...
  14. Android集成LeanCloud用户反馈SDK要注意点
  15. 带有分销体系的开源知识付费系统——cremb
  16. DCT变换(JAVA)
  17. 基于Keras的LSTM多变量时间序列预测(北京PM2.5数据集pollution.csv)
  18. poly-yolo训练自己的数据
  19. android网络优化,Android性能优化----网络优化
  20. SpringBoot+JPA 启动建表错误:CommandAcceptanceException: Error executing DDLalter table X drop foreign key

热门文章

  1. 刚开始做微商如何引流 ?一开始做微商没有客源怎么办
  2. 编译指示_#pragma在DSP中的编程技巧
  3. 微信小应用第一天(简介)
  4. python脚本分享:xml文件批量修改
  5. C++输入和输出:控制台I/O(键盘和屏幕)及文件I/O详细笔记
  6. 程序员开发常用英语词汇汇总,满满的干货!
  7. 15---TernaryOperator 三目运算符
  8. 软件企业管理——无为而无不为
  9. 2021最新某某文书列表参数pageId、ciphertext、__RequestVerificationToken以及接口返回数据result逆向分析(二)
  10. 【Willy Susilo 学术报告】Public-Key Encryption with Multi-Ciphertext Equality Test in Cloud Computing