uva--165(邮资问题,dp)
2016-01-06 14:58
253 查看
题意:
某国家发行k种不同面值的邮票,而且规定每张信封上最多仅仅能贴h张邮票。
公式n(h,k)表示用从k中面值的邮票中选择h张邮票,能够组成面额为连续的1。2。3,……n。 n是能达到的最大面值之和。
快被坑死了。回溯法是能够的,能够利用回溯法推断能拼出的数值,可是利用动态规划的思想能够提高效率,dp[i]表示拼出i须要的最少数量邮票,tmp数组一開始定义成全局了,无限TLE,貌似由于出不了wa就超时了…………
代码:
某国家发行k种不同面值的邮票,而且规定每张信封上最多仅仅能贴h张邮票。
公式n(h,k)表示用从k中面值的邮票中选择h张邮票,能够组成面额为连续的1。2。3,……n。 n是能达到的最大面值之和。
快被坑死了。回溯法是能够的,能够利用回溯法推断能拼出的数值,可是利用动态规划的思想能够提高效率,dp[i]表示拼出i须要的最少数量邮票,tmp数组一開始定义成全局了,无限TLE,貌似由于出不了wa就超时了…………
代码:
#include<iostream> #include<cstring> #include<cstdio> #include<map> #include<cstring> #include<vector> #include<algorithm> #define INF 0X3f3f3f3f #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long ll; typedef unsigned long long llu; const int maxd=1000+50; int stamp[15] ,maxval[15],ans[15],dp[maxd]; int h,k; void solve(int cur) { if(cur==k) { if(maxval[k-1]>ans[k]) { memcpy(ans,stamp,sizeof(stamp)); ans[k]=maxval[k-1]; } return; } int tmp[maxd]; memcpy(tmp,dp,sizeof(dp)); for(int i=stamp[cur-1]+1; i<=maxval[cur-1]+1; ++i) { stamp[cur]=i; for(int j=1; j<=stamp[cur]*h; ++j) { for(int k=1; k<=h; ++k) { int num=k*stamp[cur]; if(j>=num && dp[j-num]>=0) { if(dp[j]<0 && dp[j-num]+k<=h) dp[j]=dp[j-num]+k; else if(dp[j-num]+k<dp[j]) dp[j]=dp[j-num]+k; } } int cnt=maxval[cur-1]; while(dp[cnt]>0) ++cnt; maxval[cur]=cnt-1; } solve(cur+1); memcpy(dp,tmp,sizeof(tmp)); } } int main() { freopen("1.txt","r",stdin); while(scanf("%d%d",&h,&k)==2 && (h+k)) { ans[k]=0; stamp[0]=1,maxval[0]=h; mem(dp,-1); for(int i=0; i<=h; ++i) dp[i]=i; solve(1); for(int i=0; i<k; ++i) printf("%3d",ans[i]); printf(" ->%3d\n",ans[k]); } return 0; }
相关文章推荐
- Chrome firefox ie等浏览器空格 宽度不一样怎么办
- 脑袋决定口袋,思维决定未来!
- 4.解决多表连接中(左连和等值)因添加新的报表导致查询结果有问题的方法
- Nginx服务器抵御CC攻击的相关配置讲解
- 【虫师--系列19】软件性能测试的本质
- Python使用struct处理二进制
- soildworks模型导入MFC对话框
- django1.8的版本中的应用列表中加入重新定向会出错
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- Spring学习总结(5)——IOC注入方式总结
- MFC中热键操作
- Android开发中的屏幕适配问题
- java24.线程------实现
- JAVA线程池中的Callable和Future
- How can a database be in-memory and durable at the same time?
- 当方法的返回类型是数组或集合时,不要返回null,尽量返回容量为0的数组或集合
- U-BOOT的两个阶段启动过程与第二阶段的board_init_f和board_init_r
- 快捷键收集
- Bootstrap输入框组
- 第六章