栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1020 Anniversary Cake

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1020 Anniversary Cake

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int state[41],x,cake[20],s,n,cas,sum;bool ans;void dfs(int dep) {     if (dep==n) {       ans = true;       return;     }     int mini = 100, p;     for (int i=1;i<=s;i++)          if (state[i]<mini) { mini = state[i];         //当前最小的点  p = i;         }     for (int i=10;i>=1;i--) {         if (cake[i]>0 && mini+i-1<=s && p+i-1<=s) {   //以该点为左下,在不超边界的情况下  bool fit = true;    for (int k=p;k<=p+i-1;k++)        if (state[k]>mini) { //如果这一段不是“平的” fit = false;break;        }    if (fit) {       for (int k=p;k<=p+i-1;k++)state[k] += i;       cake[i]--;       dfs(dep+1);       cake[i]++;       for (int k=p;k<=p+i-1;k++)state[k] -= i;    }         }     }}        int main() {    scanf("%d",&cas);    while (cas--) {          scanf("%d%d",&s,&n);          memset(cake,0,sizeof(cake));          sum = 0;          for (int i=1;i<=n;i++) {   scanf("%d",&x);   sum += x*x;   cake[x]++;          }          ans = false;          if (sum==s*s) {  for (int i=1;i<=s;i++) state[i] = 1;  dfs(0);          }          if (ans) printf("KHOOOOB!n");          else printf("HUTUTU!n");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号