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[i−v[j]]
其中j为所用牛奶桶
ans=dp[Q]
发现dp中有许多状态是不用牛奶桶的无用状态,考虑在开始时
dp[i∗v[first−bucket]]=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