P1021 邮票面值设计

题面嘿咻

唔。。不早了我要睡觉了。。还要再发一篇我就不加解析了。。

搜索+深搜

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6 int n,k,res,ans[105],tmp[105],dp[2005];
 7 int calc(int dep,int sum)
 8 {
 9     memset(dp,0x3f,sizeof(dp));
10     dp[0]=0;
11     for(int i=1;i<=dep;i++)
12         for(int j=tmp[i];j<=n*sum;j++)
13             dp[j]=min(dp[j],dp[j-tmp[i]]+1);
14     for(int i=1;i<=n*sum;i++)
15         if(dp[i]>n)
16             return i-1;
17     return n*sum;
18 }
19 void dfs(int dep,int lst1,int lst2,int sum)
20 {
21     if(dep>k)
22     {
23         if(res<lst2)
24         {
25             res=lst2;
26             for(int i=1;i<=k;i++)
27                 ans[i]=tmp[i];
28         }
29         return ;
30     }
31     for(int i=lst1+1;i<=lst2+1;i++)
32     {
33         tmp[dep]=i;
34         int x=calc(dep,sum+i);
35         dfs(dep+1,i,x,sum+i);
36     }
37 }
38 int main()
39 {
40     scanf("%d%d",&n,&k);
41     dfs(1,0,0,0);
42     for(int i=1;i<=k;i++)
43         printf("%d ",ans[i]);
44     printf("\nMAX=%d\n",res);
45     return 0;
46 }

 

转载于:https://www.cnblogs.com/hahaha2124652975/p/11485305.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值