综合门户网站是什么意思,品牌建设运营方案,全自动引流推广软件免费,查法人信息的系统算法提高 邮票面值设计
时间限制#xff1a;1.0s 内存限制#xff1a;256.0MB 问题描述 给定一个信封#xff0c;最多只允许粘贴N张邮票#xff0c;计算在给定K#xff08;NK≤13#xff09;种邮票的情况下#xff08;假定所有的邮票数量都足够#xff09;#x…
算法提高 邮票面值设计
时间限制1.0s 内存限制256.0MB 问题描述 给定一个信封最多只允许粘贴N张邮票计算在给定KNK≤13种邮票的情况下假定所有的邮票数量都足够如何设计邮票的面值能得到最大值MAX使在1MAX之间的每一个邮资值都能得到。 例如N3K2如果面值分别为1分、4分则在1分6分之间的每一个邮资值都能得到当然还有8分、9分和12分如果面值分别为1分、3分则在1分7分之间的每一个邮资值都能得到。可以验证当N3K2时7分就是可以得到的连续的邮资最大值所以MAX7面值分别为1分、3分。
输入格式 一行两个数N、K
输出格式 两行第一行升序输出设计的邮票面值第二行输出“MAXxx”不含引号其中xx为所求的能得到的连续邮资最大值。
样例输入
3 2
样例输出
1 3 MAX7 具体看得不是太明白在别人的代码里面加了一点自己的理解留到以后水平够了再更新 #includeiostream
#define N 50
using namespace std;
#define inf 500
#includecstdio
#includecstring
int b[N],ans0,a[N],f[inf];//a[N]用来记录邮票的面值
int n,k;void dfs(int m)//搜索第m种的情况
{memset(f,0x3f,sizeof(f));//用 f[i] 记录达到数值 i 所需的最小邮票数量初始化为一个极大值。 f[0]0;//当所有的邮票加起来数值为零时不需要邮票 int i;for(i1;iinf;i)//i是总面值 {for(int j1;jma[j]i;j)//··邮票的种数和面值进行控制···邮票面值小于总面值 f[i]min(f[i],f[i-a[j]]1);if(f[i]n)//如果邮票贴满了 {i--;//回到上一次循环i的值 if(ians)//更新ans的值 {ansi;for(int l1;lm;l)//记录下来当前取得最优解时前m个邮票的面额 b[l]a[l]; }break;}}if(mk)return;//如果当前搜索到的邮票的种数等于给定的数目搜索中回溯 for(int ji1;ja[m];j--){a[m1]j;//搜索的下一种邮票面额从很大的值到比上一个大dfs(m1);//继续搜索下一个 }
}int main()
{cinnk;a[1]1;dfs(1);//从就一种邮票开始搜 for(int i1;ik;i)//输出K种面额 coutb[i] ;coutendl;coutMAXansendl;}