ZOJ 1234

这道题目我表示也还不是特别能理解。。。。还是太菜了T T

从后往前思考,因为只要后面有多的数在,那么C肯定是存在的,只要考虑是否把前两个数加在一起作为badness值这样两种情况来考虑

如果总数和3*j相同的话,那必然不用多考虑,它只能以前两个数的平方差作为badness值

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. int len[],dp[][];
  7.  
  8. int main()
  9. {
  10. int T,k,n;
  11. scanf("%d",&T);
  12. while(T--){
  13. scanf("%d%d",&k,&n);
  14.  
  15. memset(dp,0x3f,sizeof(dp));
  16. for(int i=;i<=n;i++)
  17. dp[i][]=;
  18.  
  19. k+=;
  20. for(int i=;i<=n;i++)
  21. scanf("%d",len+i);
  22. //i表示从i这点开始一直取到末尾,j表示取的筷子组
  23. for(int i=n-;i>=;i--){
  24. for(int j=;j<=k&&n-i+>=*j;j++){
  25. if(n-i+ == *j)
  26. dp[i][j] = dp[i+][j-] + (len[i]-len[i+])*(len[i]-len[i+]);
  27.  
  28. else if(n-i+>*j)
  29. //这个语句表示对于最前面的那个数选不选取有两种可能性,不选,选了那么必然还要选取相邻的数和它作为一组
  30. dp[i][j] = min(dp[i+][j],dp[i+][j-] + (len[i]-len[i+])*(len[i]-len[i+]));
  31. }
  32. }
  33.  
  34. printf("%d\n",dp[][k]);
  35. }
  36. return ;
  37. }

ZOJ 1366

这道题目对于一种产品来说数量有多样,但我们直接用0-1背包做是会超时的,所以先把商品打包在一起,数量由1,2,4,8,16~这样叠加上去,也就是说,即使有1000个数量,也只需要数组用11个地址来保存即可。

再根据0-1背包求解,这里最好把dp[]数组设为1元的,dp过程就逆向思考,不然二元的太耗内存,会不会爆我也没试过

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. int cnt;//表示产品的量
  6. int price[],dp[];
  7.  
  8. //多重背包转化成0-1背包来求解
  9. void change(int k,int pri)
  10. {
  11. int a=;
  12. price[]=;
  13. while(k>a){
  14. price[++cnt] = a*pri;
  15. k-=a;
  16. a<<=;
  17. }
  18. price[++cnt] = k*pri;
  19. }
  20.  
  21. int main()
  22. {
  23. int cash,n,d,pri;
  24.  
  25. while(~scanf("%d%d",&cash,&n)){
  26. cnt=;
  27. memset(dp,,sizeof(dp));
  28.  
  29. for(int i=;i<n;i++)
  30. {
  31. scanf("%d%d",&d,&pri);
  32. change(d,pri);
  33. }
  34.  
  35. for(int i=;i<=cnt;i++){
  36. for(int j=cash;j>=;j--){
  37. if(j>=price[i])
  38. dp[j] = max(dp[j],dp[j-price[i]]+price[i]);
  39. }
  40. }
  41.  
  42. printf("%d\n",dp[cash]);
  43. }
  44. return ;
  45. }

DP 简单题目练习的更多相关文章

  1. 字符串类dp的题目总结

    熟练掌握回文串吧,大致有dp或者模拟类的吧 ①dp+预处理,懂得如何枚举回文串(一) ②dp匹配类型的题目(二) ③dp+预处理 子串类型 (三) ④字符串的组合数(四) 一:划分成回文串 UVA11 ...

  2. 蒟蒻关于斜率优化DP简单的总结

    斜率优化DP 题外话 考试的时候被这个玩意弄得瑟瑟发抖 大概是yybGG的Day4 小蒟蒻表示根本不会做..... 然后自己默默地搞了一下斜率优化 这里算是开始吗?? 其实我讲的会非常非常非常简单,, ...

  3. dp入门题目

    本文文旨,如题... 转载请注明出处... HDOJ 1176 免费馅饼 http://acm.hdu.edu.cn/showproblem.php?pid=1176 类似数塔,从底往上推,每次都是从 ...

  4. 「模拟赛20181025」御风剑术 博弈论+DP简单优化

    题目描述 Yasuo 和Riven对一排\(n\)个假人开始练习.斩杀第\(i\)个假人会得到\(c_i\)个精粹.双方轮流出招,他们在练习中互相学习,所以他们的剑术越来越强.基于对方上一次斩杀的假人 ...

  5. 数位dp 简单入门

    推荐博客 推荐博客 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有 ...

  6. DP简单问题联系--最长递增子序列+最长公共子序列等

    今天重温了一下dp问题,发现自己两个礼拜不写题目就什么都不会了...心态爆炸,感觉去考试怕是要gg了... 不过今天总结一下写的题目,全部都是基础的dp问题 第一个是 求最长不下降子序列的长度 第一行 ...

  7. 树形DP入门题目推荐以及解析

    关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...

  8. 状压dp的题目列表 (一)

    状压dp的典型的例子就是其中某个数值较小. 但是某个数值较小也不一定是状压dp,需要另外区分的一种题目就是用暴力解决的题目,例如UVA818 紫书215 题目列表: ①校长的烦恼 UVA10817 紫 ...

  9. 区间DP入门题目合集

      区间DP主要思想是先在小区间取得最优解,然后小区间合并时更新大区间的最优解.       基本代码: //mst(dp,0) 初始化DP数组 ;i<=n;i++) { dp[i][i]=初始 ...

随机推荐

  1. WebSphere中配置的数据源在Web应用中引用的写法

    WebSphere中配置的数据源在Web应用中引用时名称一定要和数据源的JNDI名称保持一致,否则会出现无法找到数据源的错误. 引用WAS的数据源时只需要与JNDI名称保持一致即可. 引用Tomcat ...

  2. Java socket2

    通过socket对象可以获取通信对方的socket信息 客户端: import java.net.*; import java.io.*; public class TestServer { publ ...

  3. Stamus Networks的产品SELKS(Suricata IDPS、Elasticsearch 、Logstash 、Kibana 和 Scirius )的下载和安装(带桌面版和不带桌面版)(图文详解)

    不多说,直接上干货!  SELKS是什么? SELKS 是Stamus Networks的产品,它是基于Debian的自启动运行发行,面向网络安全管理.它基于自己的图形规则管理器提供一套完整的.易于使 ...

  4. xshell常用命令大全

    xshell常用命令大全 (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *. ...

  5. javascript实现弹层效果

    首先,需要有一个按钮来模拟登录: <button id="btnLogin"class="login-btn">登录</button> ...

  6. 在阿里云上搭建nginx + ThinkPHP 的实践

    作为一个程序猿,理应用linux系统来作为平时的工作机环境,哎,之前倒是用过一段时间的linux,可惜后来换了本本,后来竟然没有保持,嗷嗷后悔中... 废话不多说,大家用windows的理由都一样,但 ...

  7. vue2.0 路由知识一(路由的创建的全过程)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Websocket 关闭浏览器报错

    这个报错,是因为你关闭之后,websocket 自动连接失败造成的 只要在你的websocket 运行的类里面加上: @OnError public void onError(Throwable e, ...

  9. 手动配置webpack

    //注:“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录.const path = require('path');const webpack = require( ...

  10. Windows命名规则

    函数名: ·参照 Windows API 的命名规范. ·推荐使用动宾结构.函数名应清晰反映函数的功能.用途. ·函数名最长不得超过30个字符. ·函数名第一个字母必须大写. ·全局函数必须以小写前缀 ...