HDU 1085
2014-04-13 21:19
141 查看
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1085
指数母函数变形。
#include<iostream>
using namespace std;
#define MAX 100000
int c1[MAX],c2[MAX];
int main()
{
int i,j,k;
int f[4];
int n[4];
int m[4];
f[1]=1;
f[2]=2;
f[3]=5;
while(cin>>n[1]>>n[2]>>n[3])
{
if(n[1]==0&&n[2]==0&&n[3]==0)
break;
m[1]=n[1]*1;
m[2]=n[1]*1+n[2]*2;
m[3]= n[1]*1+n[2]*2+n[3]*5;
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for(j=0;j<=n[1];j++)
c1[j]=1;
for(i=2;i<=3;i++)
{
for(j=0;j<=m[i-1];j++)
for(k=0;k<=n[i]*f[i];k+=f[i])
{
c2[j+k]=c1[j];
}
for(j=0;j<=m[i];j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
for(i=0;i<=m[3];i++)
{
if(c1[i] == 0)
{
cout<<i<<endl;
break;
}
}
if(i == m[3]+1)
cout<<i<<endl;
}
return 0;
}
指数母函数变形。
#include<iostream>
using namespace std;
#define MAX 100000
int c1[MAX],c2[MAX];
int main()
{
int i,j,k;
int f[4];
int n[4];
int m[4];
f[1]=1;
f[2]=2;
f[3]=5;
while(cin>>n[1]>>n[2]>>n[3])
{
if(n[1]==0&&n[2]==0&&n[3]==0)
break;
m[1]=n[1]*1;
m[2]=n[1]*1+n[2]*2;
m[3]= n[1]*1+n[2]*2+n[3]*5;
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for(j=0;j<=n[1];j++)
c1[j]=1;
for(i=2;i<=3;i++)
{
for(j=0;j<=m[i-1];j++)
for(k=0;k<=n[i]*f[i];k+=f[i])
{
c2[j+k]=c1[j];
}
for(j=0;j<=m[i];j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
for(i=0;i<=m[3];i++)
{
if(c1[i] == 0)
{
cout<<i<<endl;
break;
}
}
if(i == m[3]+1)
cout<<i<<endl;
}
return 0;
}
相关文章推荐
- 【LeetCode练习题】Combination Sum
- HDU 2108 字符串递归
- wget使用方法(some)
- 杭电acm 2952
- bind "xxx.js" to object using script
- 使用c++编写和使用.so动态链接库
- hdu3786 Floyd或搜索 水题
- 在Linux中用source,dot(.)和直接用脚本文件名执行shell脚本的区别
- 机器学习——深度学习(Deep Learning)
- Android支付接入(一):支付宝
- kvm简介(二)
- 分析位深度与颜色深度的关系和发展策略
- 第三周作业
- JAVA中sort()常用方法总结
- 在3D空间中绘制三角形
- 数据库mysql和mariadb的安装
- struct和union的区别
- 第6周作业-图像缩放显示
- C++中的重载丶重写丶重定义丶重定向的区别
- Linux静态库和动态库学习总结