2012年1月2日
摘要: UVA_11000 首先分几堆是由某个维度的背包数量的最大值决定的,有了堆数K之后,我们只要按背包的维度递增的顺序依次把每个背包按1,2,…,K,1,2…这样的顺序放到每个堆里即可,这样对于任意一个堆一定不会出现重复的背包。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 10010int a[MAXD], N, K, r[MAXD], num[MAXD], first[MAXD], next[MAXD], v[MAXD];int cmp(const void *_p, con 阅读全文
posted @ 2012-01-02 21:47 Staginner 阅读(536) 评论(0) 推荐(0) 编辑
摘要: UVA_10716 首先要预判一下是否可以构成回文串,剩下的工作就是看怎么移动了。 在移动的时候我们不妨先用点贪心的思想,每次应该先把两端的变成回文,如果我们先让两端变成回文之后,这样中间的字符在移动的时候就有可能少和1个移到两端的字符发生交换,因此这样的决策不会产生负面影响。 接下来就是去想我们要怎样让两端变成回文的了,其中一个猜想就是如果两端字符不同,那么就固定两端之一不动,通过移动另外一个字符使两端成为回文的,而且哪种方式交换次数少就选择哪种方式。至于为什么这么做,我暂时只是感觉可以,并没有进行严谨的证明。#include<stdio.h>#include<string 阅读全文
posted @ 2012-01-02 20:34 Staginner 阅读(599) 评论(0) 推荐(0) 编辑