poj 1190 生日蛋糕 剪枝dfs
2013-04-14 19:38
197 查看
两个可行性剪枝 if(i*i*j*m
int tmp=0,p=1;
for(int k=1;k<=m;k++)
{
tmp+=p*p*p;
p++;
}
if(tmp>n) continue;
一个最优化剪枝 if(2*n/i+s>=ans) continue;
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
const int inf=999999;
int ans=inf;
int M;
int dfs(int r,int h,int n,int m,int s)
{
for(int
i=r-1;i>=1;i--)
for(int
j=h-1;j>=1;j--)
if(i*i*j<=n)
{
if(m==1)
{
int
tmp=0;
if(m==M)
tmp=i*i;
if(i*i*j!=n) continue;
if(s+2*i*j+tmp<ans)
ans=s+2*i*j+tmp;
continue;
}
if(i*i*j*m<n) continue;
{
int
tmp=0,p=1;
for(int
k=1;k<=m;k++)
{
tmp+=p*p*p;
p++;
}
if(tmp>n) continue;
}
if(m!=M)
{
if(2*n/i+s>=ans) continue;
}
int tmp=0;
if(m==M) tmp=i*i;
dfs(i,j,n-i*i*j,m-1,s+tmp+2*i*j);
}
return(0);
}
int main()
{
int n,m;
scanf("%d
%d",&n,&m);
M=m;
int r=sqrt(n/m)+1;
int h=n/m/m+1;
dfs(r,h,n,m,0);
if(ans!=inf)
printf("%d\n",ans);
else
printf("0\n");
return 0;
}
int tmp=0,p=1;
for(int k=1;k<=m;k++)
{
tmp+=p*p*p;
p++;
}
if(tmp>n) continue;
一个最优化剪枝 if(2*n/i+s>=ans) continue;
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
const int inf=999999;
int ans=inf;
int M;
int dfs(int r,int h,int n,int m,int s)
{
for(int
i=r-1;i>=1;i--)
for(int
j=h-1;j>=1;j--)
if(i*i*j<=n)
{
if(m==1)
{
int
tmp=0;
if(m==M)
tmp=i*i;
if(i*i*j!=n) continue;
if(s+2*i*j+tmp<ans)
ans=s+2*i*j+tmp;
continue;
}
if(i*i*j*m<n) continue;
{
int
tmp=0,p=1;
for(int
k=1;k<=m;k++)
{
tmp+=p*p*p;
p++;
}
if(tmp>n) continue;
}
if(m!=M)
{
if(2*n/i+s>=ans) continue;
}
int tmp=0;
if(m==M) tmp=i*i;
dfs(i,j,n-i*i*j,m-1,s+tmp+2*i*j);
}
return(0);
}
int main()
{
int n,m;
scanf("%d
%d",&n,&m);
M=m;
int r=sqrt(n/m)+1;
int h=n/m/m+1;
dfs(r,h,n,m,0);
if(ans!=inf)
printf("%d\n",ans);
else
printf("0\n");
return 0;
}
相关文章推荐
- ACM: 一题DFS(深搜,剪枝) poj 1011
- ACM: spfa+dfs 图论题 poj 2679
- ACM: 方向dfs + bfs求最短路 poj 3…
- hdu1455 && poj1011 Sticks(深度优先搜索 DFS 经典剪枝 详解)
- poj&nbsp;2531&nbsp;暴力dfs
- ACM: dfs题 poj 1321 (n皇后问题)
- poj&nbsp;Light&nbsp;Up&nbsp;dfs
- poj&nbsp;1655&nbsp;balancing&nbsp;act&nbsp;dfs
- ACM: 条件最短路 poj 1724 (没剪枝…
- poj 1014 && zoj 1149 Dividing --- dfs剪枝
- 不要丧呀&&POJ 2362 && [剪枝]&&[dfs]
- hdoj 1455 && nyoj 293 && poj 1110 Sticks 【DFS + 剪枝 + 剪枝 + 剪枝 + 。。。+ 剪枝】
- POj 2379 ACM Rank Table
- ZZULI_SummerPractice(4) POJ 2312…
- POJ 2560 Freckles
- ZZULI_TEAM_PRACTICE(1) POJ 2259…
- DFS.枚舉::poj1753 flip game && poj2965 the Pilots Brothers'refrigerator
- poj 3126 Prime Path
- POJ 1011 最小的木棒 (dfs+剪枝|| 搜索好题)
- poj&nbsp;1020&nbsp;搜索