题意:

某国家发行k种不同面值的邮票,而且规定每张信封上最多仅仅能贴h张邮票。

公式n(h,k)表示用从k中面值的邮票中选择h张邮票,能够组成面额为连续的1。2。3,……n。 n是能达到的最大面值之和。

快被坑死了。回溯法是能够的,能够利用回溯法推断能拼出的数值,可是利用动态规划的思想能够提高效率,dp[i]表示拼出i须要的最少数量邮票,tmp数组一開始定义成全局了,无限TLE,貌似由于出不了wa就超时了…………

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<map>
  5. #include<cstring>
  6. #include<vector>
  7. #include<algorithm>
  8. #define INF 0X3f3f3f3f
  9. #define mem(a,b) memset(a,b,sizeof(a))
  10. using namespace std;
  11.  
  12. typedef long long ll;
  13. typedef unsigned long long llu;
  14. const int maxd=1000+50;
  15. int stamp[15] ,maxval[15],ans[15],dp[maxd];
  16. int h,k;
  17.  
  18. void solve(int cur)
  19. {
  20.  
  21. if(cur==k)
  22. {
  23. if(maxval[k-1]>ans[k])
  24. {
  25. memcpy(ans,stamp,sizeof(stamp));
  26. ans[k]=maxval[k-1];
  27. }
  28. return;
  29. }
  30. int tmp[maxd];
  31. memcpy(tmp,dp,sizeof(dp));
  32. for(int i=stamp[cur-1]+1; i<=maxval[cur-1]+1; ++i)
  33. {
  34. stamp[cur]=i;
  35.  
  36. for(int j=1; j<=stamp[cur]*h; ++j)
  37. {
  38. for(int k=1; k<=h; ++k)
  39. {
  40. int num=k*stamp[cur];
  41. if(j>=num && dp[j-num]>=0)
  42. {
  43. if(dp[j]<0 && dp[j-num]+k<=h) dp[j]=dp[j-num]+k;
  44. else if(dp[j-num]+k<dp[j]) dp[j]=dp[j-num]+k;
  45. }
  46.  
  47. }
  48. int cnt=maxval[cur-1];
  49. while(dp[cnt]>0) ++cnt;
  50. maxval[cur]=cnt-1;
  51. }
  52. solve(cur+1);
  53. memcpy(dp,tmp,sizeof(tmp));
  54. }
  55. }
  56.  
  57. int main()
  58. {
  59. freopen("1.txt","r",stdin);
  60. while(scanf("%d%d",&h,&k)==2 && (h+k))
  61. {
  62.  
  63. ans[k]=0;
  64. stamp[0]=1,maxval[0]=h;
  65. mem(dp,-1);
  66. for(int i=0; i<=h; ++i)
  67. dp[i]=i;
  68. solve(1);
  69. for(int i=0; i<k; ++i)
  70. printf("%3d",ans[i]);
  71. printf(" ->%3d\n",ans[k]);
  72. }
  73. return 0;
  74. }

uva--165(邮资问题,dp)的更多相关文章

  1. UVA.674 Coin Change (DP 完全背包)

    UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...

  2. uva 10817(数位dp)

    uva 10817(数位dp) 某校有m个教师和n个求职者,需讲授s个课程(1<=s<=8, 1<=m<=20, 1<=n<=100).已知每人的工资c(10000 ...

  3. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  4. uva 10453 - Make Palindrome(dp)

    题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...

  5. uva 10671 - Grid Speed(dp)

    题目链接:uva 10671 - Grid Speed 题目大意:给出N,表示在一个N*N的网格中,每段路长L,如今给出h,v的限制速度,以及起始位置sx,sy,终止位置ex,ey,时间范围st,et ...

  6. uva 1331 - Minimax Triangulation(dp)

    option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4077&mosm ...

  7. UVa 11825 - Hackers' Crackdown DP, 枚举子集substa = (substa - 1)&sta 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  8. uva 10721 - Bar Codes(dp)

    题目链接:uva 10721 - Bar Codes 题目大意:给出n,k和m,用k个1~m的数组成n,问有几种组成方法. 解题思路:简单dp,cnt[i][j]表示用i个数组成j, cnt[i][j ...

  9. UVA 10328 - Coin Toss dp+大数

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  10. uva 104 Arbitrage (DP + floyd)

    uva 104 Arbitrage Description Download as PDF Background The use of computers in the finance industr ...

随机推荐

  1. LA 3027 Corporative Network 并查集记录点到根的距离

    Corporative Network Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [S ...

  2. 从头来之【图解针对虚拟机iOS开发环境搭建】 (转)

    1.下载Mac OSX10.9. 点击下载 2.下载VMware Workstation 10,点击下载,网页中包含序列号.安装VM. 3.VM10-MacOS补丁.用于创建苹果虚拟机. 安装VM就不 ...

  3. Debian7.6安装过程中遇到的问题

    一 sudo命令不能用 1 使用su切换到root用户,命令: su 2 使用名:vim /etc/sudoers加入sudoer用户,命令: vim /etc/sudoers 找到root=(ALL ...

  4. 安卓SDK更新host文件地址

    之前在安装jdk时,安装进度一直很缓慢,在更新这个(两个任选,都有效)host文件地址后,瞬间就可以了. 203.208.46.146 dl.google.com 203.208.46.146 dl- ...

  5. SWT的TableVierer的使用二(数据排序)

    有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序.那JFace是如何实现这个功能的呢?在JFace中是通过一个排序器来实现的,就是Vie ...

  6. Linux环境编程之同步(二):条件变量

    相互排斥锁用于上锁,条件变量则用于等待.条件变量是类型为pthread_cond_t的变量.一般使用例如以下函数: #include <pthread.h> int pthread_con ...

  7. 超炫HTML5 SVG聊天框拖拽弹性摇摆动画特效

    这是一款很有创意的HTML5 SVG聊天框拖拽弹性摇摆动画特效. 用户能够用鼠标点击或用手滑动聊天框上的指定区域,该区域会以很有弹性的弹簧效果拉开聊天用户列表.点击一个用户头像后.又以同样的弹性特效切 ...

  8. 用数组array代替CActiveRecord构建CArrayDataProvider

    当需要构建 GridView的时候: 常常用 CArrayDataProvider 或者 CActiveDataProvider 这是就需要一个CActiveRecord 比如:  857       ...

  9. Windows Phone开发(43):推送通知第一集——Toast推送

    原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一 ...

  10. Android开发ListView使用OnScrollListener实现分页加载数据

    上篇博文和大家分享了下拉刷新,这是一个用户体验很好的操作方式.新浪微薄就是使用这样的方式的典型. 还有个问题,当用户从网络上读取微薄的时候.假设一下子所有载入用户未读的微薄这将耗费比較长的时间,造成不 ...