枚举水过
#include <cstdio>
#include <cstring>
int main()
{
int s, d, e[12], ans;
int n = 1 << 12;
while(~scanf("%d%d",&s,&d))
{
ans = -1;
for(int i=0;i<n;++i)
{
for(int j=0;j<12;++j)
{
e[j] = (i&(1<<j))?s:-d;
}
bool flag = true;
for(int j=0;j<8;++j)
{
int cnt = 0;
for(int k=0;k<5;++k)
{
cnt += e[j+k];
}
if(cnt >= 0)
{
flag = false;
break;
}
}
if(flag)
{
int cnt = 0;
for(int j=0;j<12;++j)
{
cnt += e[j];
}
if(cnt > ans)
{
ans = cnt;
}
}
}
if(ans >= 0)
{
printf("%d\n", ans);
}
else
{
printf("Deficit\n");
}
}
return 0;
}
本文介绍了一个使用枚举算法解决特定问题的实例。通过枚举所有可能的状态,该算法寻找最优解,适用于约束条件较为简单的问题场景。代码示例展示了如何初始化状态、遍历所有可能性并检查是否满足条件。
880

被折叠的 条评论
为什么被折叠?



