uva 165 卡住了一下午!
来源:互联网 发布:手机免费自动关机软件 编辑:程序博客网 时间:2024/04/29 01:17
最近上网发现自己写的文章出现在很多人的博客上面,还不注明是转载,还是原创!面对这种行为我无力吐槽,转载还请注明出处。谢谢!
http://blog.csdn.net/monkeyduck
这道题题意不太好懂,说的是给定h和k两个数,h是邮票的张数,k是邮票面额的种类,h+k<=9。举例来说,h=3,k=2就是有最多可以选三张邮票,有两种面额的邮票可选,具体面值多少自己定,要求可以组成的面额必须是连续且最大。面额可以定为1块和3块,这样选3张可以组成1,2,3,4,5,6,7,9块的总面额,所以最大连续的值为7。同样可以定面额为1块和四块,这样可以组成1,2,3,4,5,6,8,9,12块,但连续的只能到6,所以h=3,k=2这种条件下7是最有解。
这个题最开始我是用的回溯套回溯的办法,因为面额要枚举,然后每一张怎么选也要枚举,但这样非常慢,后来参考网上别人的做法,先枚举在现有邮票的情况下可以达到的最大连续面额,然后枚举面额,每往后枚举一位的下限是前一位的面额+1,上限是之前的连续和的最大值+1。
#include<iostream>#include<cstring>#include<iomanip>using namespace std;int h,k,Maxsum,Put[10],De[10],finalDe[10];bool vis[200];void getsum(int n,int cur,int sum)//在现有邮票情况下的面额{if (cur==h){vis[sum]=1;return;}vis[sum]=1;for (int i=0;i<=n;i++)getsum(n,cur+1,sum+De[i]);}void dfs(int cur,int num){if (cur==k+1){if (num-1>Maxsum){Maxsum=num-1;memcpy(finalDe,De,sizeof(De));}}else{for (int i=De[cur-1]+1;i<=num;i++){De[cur]=i;memset(vis,0,sizeof(vis));getsum(cur,0,0);//为了标记vis数组得到下一次枚举面额的上限jint j=De[cur-1]+1;while(vis[j++]);dfs(cur+1,j-1);//j-1即为之前的面额无法达到的值,下一次枚举的面额不能超过此致,否则会出现断点}}}int main(){while (cin>>h>>k&&h){Maxsum=0;De[0]=0;De[1]=1;dfs(2,h+1);for (int i=1;i<=k;i++)cout<<setw(3)<<finalDe[i];cout<<" ->";cout<<setw(3)<<Maxsum<<endl;}return 0;}
- uva 165 卡住了一下午!
- 忙了一下午
- 弄了一下午!
- 今天去春熙路逛了一下午
- 看了一下午的遗传
- 准备去HK,忙了一下午
- 虚拟机妈的,搞了一下午
- 郁闷了一下午的问题
- 找了一下午的错误 ~
- Arraylis 问题,纠结了一下午
- MVVM入门 - 新手倒腾一下午了
- 快速排序 折腾了一下午- -|
- 一个import浪费了一下午
- VS 2017 安装了一下午
- 一个错误搞了一下午
- Jbuilder下配置hibernate例子 搞了一下午了。。。。。。。
- 试了一下午,终于mysql能用了
- 11月5号,下午弄了一下午的简历,基本信息都完成了
- 计算s=1-1/2!+1/3!-…+1/9!
- 编译和解释的区别是什么?
- 车厢调度
- 位姿:***图像特征-特征提取-姿态估计
- apue 学习笔记(2)
- uva 165 卡住了一下午!
- (原)Cisco VTP协议
- oadlibrary(xxx.dll) 失败 由于应用程序配置不正确
- 字符串的equal比较
- 行为识别特征综述
- (STL中自带的排序功能7.3.3)POJ 1318 Word Amalgamation(求解一个单词是否在字典里面。解法:将单词按字典序处理后的结果与字典中的单词安字典序处理后的结果进行比较)
- bzero 函数
- 完美世界2013校园招聘笔试题
- (原)Cisco HSRP&VRRP