DP 简单题目练习
ZOJ 1234
这道题目我表示也还不是特别能理解。。。。还是太菜了T T
从后往前思考,因为只要后面有多的数在,那么C肯定是存在的,只要考虑是否把前两个数加在一起作为badness值这样两种情况来考虑
如果总数和3*j相同的话,那必然不用多考虑,它只能以前两个数的平方差作为badness值
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; int len[],dp[][]; int main()
{
int T,k,n;
scanf("%d",&T);
while(T--){
scanf("%d%d",&k,&n); memset(dp,0x3f,sizeof(dp));
for(int i=;i<=n;i++)
dp[i][]=; k+=;
for(int i=;i<=n;i++)
scanf("%d",len+i);
//i表示从i这点开始一直取到末尾,j表示取的筷子组
for(int i=n-;i>=;i--){
for(int j=;j<=k&&n-i+>=*j;j++){
if(n-i+ == *j)
dp[i][j] = dp[i+][j-] + (len[i]-len[i+])*(len[i]-len[i+]); else if(n-i+>*j)
//这个语句表示对于最前面的那个数选不选取有两种可能性,不选,选了那么必然还要选取相邻的数和它作为一组
dp[i][j] = min(dp[i+][j],dp[i+][j-] + (len[i]-len[i+])*(len[i]-len[i+]));
}
} printf("%d\n",dp[][k]);
}
return ;
}
ZOJ 1366
这道题目对于一种产品来说数量有多样,但我们直接用0-1背包做是会超时的,所以先把商品打包在一起,数量由1,2,4,8,16~这样叠加上去,也就是说,即使有1000个数量,也只需要数组用11个地址来保存即可。
再根据0-1背包求解,这里最好把dp[]数组设为1元的,dp过程就逆向思考,不然二元的太耗内存,会不会爆我也没试过
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int cnt;//表示产品的量
int price[],dp[]; //多重背包转化成0-1背包来求解
void change(int k,int pri)
{
int a=;
price[]=;
while(k>a){
price[++cnt] = a*pri;
k-=a;
a<<=;
}
price[++cnt] = k*pri;
} int main()
{
int cash,n,d,pri; while(~scanf("%d%d",&cash,&n)){
cnt=;
memset(dp,,sizeof(dp)); for(int i=;i<n;i++)
{
scanf("%d%d",&d,&pri);
change(d,pri);
} for(int i=;i<=cnt;i++){
for(int j=cash;j>=;j--){
if(j>=price[i])
dp[j] = max(dp[j],dp[j-price[i]]+price[i]);
}
} printf("%d\n",dp[cash]);
}
return ;
}
DP 简单题目练习的更多相关文章
- 字符串类dp的题目总结
熟练掌握回文串吧,大致有dp或者模拟类的吧 ①dp+预处理,懂得如何枚举回文串(一) ②dp匹配类型的题目(二) ③dp+预处理 子串类型 (三) ④字符串的组合数(四) 一:划分成回文串 UVA11 ...
- 蒟蒻关于斜率优化DP简单的总结
斜率优化DP 题外话 考试的时候被这个玩意弄得瑟瑟发抖 大概是yybGG的Day4 小蒟蒻表示根本不会做..... 然后自己默默地搞了一下斜率优化 这里算是开始吗?? 其实我讲的会非常非常非常简单,, ...
- dp入门题目
本文文旨,如题... 转载请注明出处... HDOJ 1176 免费馅饼 http://acm.hdu.edu.cn/showproblem.php?pid=1176 类似数塔,从底往上推,每次都是从 ...
- 「模拟赛20181025」御风剑术 博弈论+DP简单优化
题目描述 Yasuo 和Riven对一排\(n\)个假人开始练习.斩杀第\(i\)个假人会得到\(c_i\)个精粹.双方轮流出招,他们在练习中互相学习,所以他们的剑术越来越强.基于对方上一次斩杀的假人 ...
- 数位dp 简单入门
推荐博客 推荐博客 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有 ...
- DP简单问题联系--最长递增子序列+最长公共子序列等
今天重温了一下dp问题,发现自己两个礼拜不写题目就什么都不会了...心态爆炸,感觉去考试怕是要gg了... 不过今天总结一下写的题目,全部都是基础的dp问题 第一个是 求最长不下降子序列的长度 第一行 ...
- 树形DP入门题目推荐以及解析
关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...
- 状压dp的题目列表 (一)
状压dp的典型的例子就是其中某个数值较小. 但是某个数值较小也不一定是状压dp,需要另外区分的一种题目就是用暴力解决的题目,例如UVA818 紫书215 题目列表: ①校长的烦恼 UVA10817 紫 ...
- 区间DP入门题目合集
区间DP主要思想是先在小区间取得最优解,然后小区间合并时更新大区间的最优解. 基本代码: //mst(dp,0) 初始化DP数组 ;i<=n;i++) { dp[i][i]=初始 ...
随机推荐
- C# 操作Access的Ole对象[转]
原文链接 OLE对象数据类型 (1)OLE 对象用于使用 OLE 协议在其他程序中创建的 OLE 对象,如 Microsoft Word 文档. Microsoft Excel 电子表格.图片.声音或 ...
- ORA-00445: Background Process "xxxx" Did Not Start After 120 Seconds
Recent linux kernels have a feature called Address Space Layout Randomization (ASLR).ASLR is a feat ...
- 【LeetCode】树的遍历
非递归中序遍历: 思路:注释 vector<int> inorderTraversal(TreeNode* root) { vector<int>ret; if(root == ...
- ftp 上传与下载
//上传 ftpmg.Upload("", DateTime.Now.ToString("yyyyMMddhhmmss")); //下载 ftpmg.Downl ...
- js插件之Ocupload
使用方法: var myUpload = $(element).upload({ name: 'file', action: '', enctype: 'multipart/form-data', p ...
- CF949A/950C Zebras
思路: 贪心乱搞. 实现: #include <bits/stdc++.h> using namespace std; vector<vector<int>> v; ...
- Elasticsearch--集群管理_再平衡&预热
目录 控制集群的再平衡 再平衡 集群的就绪 集群再平衡设置 控制再平衡何时开始 控制同时在节点移动的分片数量 控制单个节点上同时初始化的分片数量 控制单个节点上同时初始化的主分片数量 控制分配的分片类 ...
- sql发送邮件- html 格式
ALTER PROCEDURE dbo.sx_pro_AutoEmailContent AS Begin declare @Rqty int declare @n int declare @m_rec ...
- Farseer.net轻量级ORM开源框架 V1.x 教程目录
本篇教程将以Ver 1.x版本进行详细使用讲解 大家有任何疑问可以加入我们的官方QQ群进行讨论.QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net 整个 ...
- fedora27安装ssh
Fedora安装sshd 先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server openssh-server-5.3p1-1 ...