Gym
来源:互联网 发布:winaip阅读器软件下载 编辑:程序博客网 时间:2024/06/06 08:32
https://vjudge.net/contest/170300#problem/I
dfs//其实这里deep应该是个数的意思把。。。
int st[maxn];int cnt=0;bool dfs(int n,int start,int deep){ if(n<0)return 0; if(deep==0){ if(n==0){ pf("%d\n",cnt); rep(i,1,cnt){ pf("%d%c",st[i],i==cnt?'\n':' '); } return 1; } return 0; } for(int i=start;i>=1;i--){ if(i*i*i*deep<n)break; st[++cnt]=i; if(dfs(n-i*i*i,i,deep-1))return 1; --cnt; } return 0;}int main(){ int n; while(~sf("%d",&n)){ cnt=0; for(int i=1;i<=n;++i){ if(dfs(n,365,i))break; } }}
个人感觉另一种写法更好看。。int a[1000];int tmp[1000];int ans=0;void dfs(int now,int n,int mx){ if(n==0){ if(now<ans){ ans=now; for(int i=0;i<ans;++i){ a[i]=tmp[i]; } } } if(now+1>=ans)return;//说这个简直很减去时间 for(int i=mx;i>=1;i--){ if(i*i*i>n)continue; if(now+n/(i*i*i)>=ans)return; tmp[now]=i; dfs(now+1,n-i*i*i,i); if(n==i*i*i)return; }}int main(){ int n; while(~sf("%d",&n)){ ans=inf; dfs(0,n,365); pf("%d\n",ans); rep(i,0,ans-1)pf("%d ",a[i]); puts(""); }}
阅读全文
0 0
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- 2017杭电多校联赛6-Inversion-排序-hdu6098
- 修改文件名
- [BZOJ2684][USACO 2004 FEB]距离询问
- Matlab画折线图(线上有点)
- 经典DP——最长公共子序列
- Gym
- UVA 10954 Add All
- Qt日志输出至文件
- ubuntu 16.04下用.NET Core写C#程序
- POJ 2492A Bug's Life
- windows端ftp服务端和客户端配置
- 数据结构-AVL树
- 早起21天
- Canvas---七巧板