Luogu P1021 邮票面值设计

题意:

  给定一个信封,最多只允许粘贴N张邮票,计算在给定KN+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1MAX之间的每一个邮资值都能得到。

思路:

  没思路。。。强行搜索。先枚举邮票组合,再求组合对应的MAX。

  后一张邮票面值的枚举范围是(前一张面值+1——目前最长可取到的MAX+1)

  MAX用多重背包求解(未二进制优化,N较小影响不大)。

关于搜索复杂度的计算

  据说指数级的复杂度没有必要算,只要把该剪的枝剪了,应该就能过。

PS

  这道题一开始没过,因为数组开太大,最后一个点TLE。

  其实也不大,最于7 8这种数据可能还嫌太小,但经测试,1000就可以过了。

  (试了一下7 8,不知道何年何月能给出结果。。。)

#include<iostream>
#include<vector> 
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<map>
#define INF 0x7f7f7f7f
#define MAX_INT 0x7fffffff
#define pi 3.1415926
typedef unsigned int uint;
using namespace std;
typedef long long LL;
int ci[1000],n,k,maxc=0,contin,value[15];
//value[]=记录邮票面值
//contin=单个组合的MAX
//maxc=所有组合的MAX,即所求
//ci[i]=构成i价值所需的最少邮票数
//maxc=连续的邮资最大值 int dfs(int dpsj,int v,int c){//dpsj最大可达到的价值 = maxv*N int beifen[1000],p; for(int i=dpsj;i>=0;i--){ if(ci[i]>n)continue; for(int j=n-ci[i];j;j--){ p=i+j*v; ci[p]=min(ci[p],ci[i]+j); } } for(int i=0;i<1000;i++)beifen[i]=ci[i]; while(ci[contin+1]<=n)contin++; if(c==k) if(contin>maxc){ maxc=contin; value[c]=v; return 1; } else{ return 0; } int sj=contin+1,f=0; for(int i=v+1;i<=sj;i++){ if(dfs(v*n,i,c+1)){ value[c]=v; f=1; } for(int i=0;i<1000;i++)ci[i]=beifen[i]; contin=sj-1; } return f; } int main(){ memset(ci,1,sizeof(ci)); ci[0]=0; cin>>n>>k; contin=n; dfs(0,1,1); for(int i=1;i<=k;i++)cout<<value[i]<<' '; cout<<endl; cout<<"MAX="<<maxc<<endl; return 0; }

 

转载于:https://www.cnblogs.com/Gsimt/p/10027617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值