机房水题欢乐赛 2016-04-23 上午 搜索

milk4

【描述】

农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出。消费者要多少,他就给多少,从不有任何误差。
农夫约翰总是很节约。他现在在奶牛五金商店购买一些桶,用来从他的巨大的牛奶池中量出 Q 夸脱的牛奶。每个桶的价格一样。你的任务是计算出一个农夫约翰可以购买的最少的桶的集合,使得能够刚好用这些桶量出 Q 夸脱的牛奶。另外,由于农夫约翰必须把这些桶搬回家,对于给出的两个极小桶集合,他会选择“更小的”一个,即:把这两个集合按升序排序,比较第一个桶,选择第一个桶容积较小的一个。如果第一个桶相同,比较第二个桶,也按上面的方法选择。否则继续这样的工作,直到相比较的两个桶不一致为止。例如,集合 {3,5,7,100} 比集合 {3,6,7,8} 要好。
为了量出牛奶,农夫约翰可以从牛奶池把桶装满,然后倒进瓶子。他决不把瓶子里的牛奶倒出来或者把桶里的牛奶倒到别处。用一个容积为 1 夸脱的桶,农夫约翰可以只用这个桶量出所有可能的夸脱数。其它的桶的组合没有这么方便。
计算需要购买的最佳桶集,保证所有的测试数据都至少有一个解。

【INPUT FORMAT】

Line 1: 一个整数 Q
Line 2: 一个整数P(1 <= P <= 100),表示商店里桶的数量
Lines 3..P+2: 每行包括一个桶的容积(1 <= 桶的容积 <= 10000)

【OUTPUT FORMAT】special judge

输出文件只有一行,由空格分开的整数组成:
为了量出想要的夸脱数,需要购买的最少的桶的数量,接着是:
一个排好序的列表(从小到大),表示需要购买的每个桶的容积
{大家注意真正的输入中没有从小到大}

【SAMPLE INPUT (file milk4.in)】

16
3
3
5
7

【SAMPLE OUTPUT (file milk4.out)】

2 3 5

Solution

ID-DFS。。(与IDA*联系)
所谓ID就是枚举深度。。
当搜索到一种方案判断是否可行时考虑DP,令 dp[i] 表示需求的牛奶为i时,是否可行,有
dp[0]=true
dp[i]=dp[i] or dp[iv[j]] 其中j为所用牛奶桶
ans=dp[Q]
发现dp中有许多状态是不用牛奶桶的无用状态,考虑在开始时 dp[iv[firstbucket]]=true 即可。

latin

【描述】

一种正方形的数字编排
1 2 3 4 5
2 1 4 5 3
3 4 5 1 2
4 5 2 3 1
5 3 1 2 4

是一个5×5的拉丁幻方,即每个1到5的整数在每行每列都出现且出现一次。
写个程序计算N×N的的拉丁幻方的总数且要求第一行是:
1 2 3 4 5…….N

2<=N<=7

【INPUT FORMAT】

一行包含一个整数N

【OUTPUT FORMAT】

只有一行,表示拉丁正方形的个数,且拉丁正方形的第一行为 1 2 3 … N.

【SAMPLE INPUT (file latin.in)】

5

【SAMPLE OUTPUT (file latin.out)】

1344

Solution

和N皇后很像?
N皇后的弱化又加强版?

木棒游戏

【问题描述】

这是一个很古老的游戏。用木棒在桌上拼出一个不成立的等式,移动且只移动一根木棒使得等式成立。现在轮到你了。

【任务】

从文件读入一个式子。
如果移动一根木棒可以使等式成立,则输出新的等式,否则输出No。
【说明和限制】
1.式子中只会出现加号和减号(包括负号),并且有且仅有一个等号,不会出现括号、乘号或除号,也不会有++,–,+-或-+出现。
2.式子中不会出现8个或8个以上的连续数字。
3.你只能移动用来构成数字的木棒,不能移动构成运算符(+ -=)的木棒,所以加号、减号、等号是不会改变的。移动前后,木棒构成的数字必须严格与图2中的0~9相符。
4.修改前的等式中的数不会以0开头,但允许修改后的等式中的数以数字0开头。

【输入数据】

从文件game.in中读入一行字符串。该串中包括一个以“#”字符结尾的式子(ASCII码35),式子中没有空格或其他分隔符。输入数据严格符合逻辑。字符串的长度小于等于1000。
注意:“#”字符后面可能会有一些与题目无关的字符。

【输出数据】

输出结果到文件game.out,输出仅一行。
如果有解,则输出正确的等式,格式与输入的格式相同(以“#”结尾,中间不能有分隔符,也不要加入多余字符)。
如果无解,则输出“No”(N大写,o小写)。

【输入样例1】

1+1=3#

【输出样例1】

1+1=2#

【输入样例2】

1+1=3+5#

【输出样例2】

No

【输入样例3】

11+77=34#

【输出样例3】

17+17=34#

Solution

移动火柴有2种情况。
一种是同个数字内,另一种是两个数字间。
先算出数字的和,枚举可能的变化值。
注意要把可能变化情况写全。。。
漏了嘛。。QwQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值