codevs 1047 邮票面值设计

Posted 一入OI深似海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 1047 邮票面值设计相关的知识,希望对你有一定的参考价值。

/*
开始没啥好的思路 暴力吧 T的太严重
加了k>n的特判  结果没数据…..然后又暴力生成了几组答案 打表
然而有没有数据 华丽的爆零了
正解 回溯+DP
回溯生成k数组 然后DP找最优解更新 

*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,k,f[550],a[55],ans[55],Ans;
void Judge()//DP判断  f[i]表示面值为i最少需要的票数 
{
    memset(f,127/3,sizeof(f));
    f[0]=0;
    int i=0;
    while(f[i]<=n)//连不起来 就停下 
      {
          i++;//累加保证可以组合成没个数 
          for(int j=1;j<=k;j++)
            if(i>=a[j])
              f[i]=min(f[i],f[i-a[j]]+1);//更新最优解 
      }
    i--;
    if(i>Ans)
      {
          Ans=i;
          for(int j=1;j<=k;j++)
            ans[j]=a[j];
      }
}
void Dfs(int l)
{
    if(l==k)
      {
          Judge();
          return;
      }
    for(int i=a[l]+1;i<=a[l]*n+1;i++)
      {
          a[++l]=i;
          Dfs(l);l--;
      }
}
int main()
{
    scanf("%d%d",&n,&k);
    Dfs(0);
    for(int i=1;i<=k;i++)
      printf("%d ",ans[i]);
    printf("\nMAX=%d\n",Ans);
    return 0;
}

 

以上是关于codevs 1047 邮票面值设计的主要内容,如果未能解决你的问题,请参考以下文章

深搜+DP剪枝 codevs 1047 邮票面值设计

codevs 1047 邮票面值设计

codevs 1047 邮票面值设计

1047 邮票面值设计 (DFS+DP)

codevs 2033 邮票

NOIP_1999.TG4:邮票面值设计