您的位置:首页 > 其它

时间优化的算法题

2012-12-05 19:33 267 查看
POJ
2236

我在poj上2236测试了很多实例,显示:
在输入输出上:用scanf,printf代替cin,cout可以大大加快时间,尤其对于输入、输出频繁的测试
1014
是一道动态规划的题目,但是可能超时,需要剪枝,搜索现在还是低级之低级,就不试了
#include <iostream>
using namespace std;
int a[60001],num[6],sum;
bool dp()
{
sum/=2;
int mmax=0;
a[0]=1;
for(int i=6;i>0;i--)
{
for(int j=mmax;j>=0;j--)
{
if(a[j]==0)
continue;
for(int k=1;k<=num[i-1];k++)
{
if(j+k*i>sum||a[j+k*i] ) //开始没加||a[j+k*i] ,300ms,加了后0,以后记得动态规划的剪枝
break;
else if(j+k*i==sum)
return true;
else if(j+k*i>mmax)
mmax=j+k*i;
a[j+k*i]=1;
}
}
}
return false;
}
int main()
{
int flag,i,cs=0;
while(1)
{
memset(a,0,sizeof(a));
sum=0;
for(i=0;i<6;i++){
scanf("%d",&num[i]);
sum+=(i+1)*num[i];
}
if(sum==0)
break;
if(sum%2||dp()==false )
{
printf("Collection #%d:\nCan't be divided.\n\n",++cs);
continue;
}
printf("Collection #%d:\nCan be divided.\n\n",++cs);
}
system("pause");
return 0;
}
1742 与上题类似的解法,可惜耗时较大,但从大到小排序了后似乎有点改良
http://acm.pku.edu.cn/JudgeOnline/status?problem_id=1742&user_id=tanzhangwen&result=0&language=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐