摘要: 题意很简单, 有n种硬币,每种硬币面额多大,有多少个,求可以构成m以内的面额有多少种。开始用的是普通的多重背包的求法,裸裸的超时了,看了别人的代码,发现可以优化很多。用usea这个来存储用来多少个a硬币,避免的很多无用的计算。先贴以前超时的代码#include #include int dp[100005];int coin[101];int cnt[101];int used[1000101];int main(){ int n, k; while(scanf("%d %d", &n, &k)) { if (n==0 && k==0) b. 阅读全文
posted @ 2013-10-03 17:11 xindoo 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 这道题第一眼看去很难,其实不然,短短几行代码就搞定了。 说一下大概思路,如果是排成一排的n个人,如 1 2 3 4 5 6 7 8 我们要变成 8 7 6 5 4 3 2 1 需要交换 28次,找规律的话就是 n*(n-1)/2,但这道题是一个圈,要让他们顺序变反的话不一定1要在8的位置上去,4 3 2 1 8 7 6 5 这样也是反的,我们只要把n个人分成两部分,然后按拍成一条线的方法来出来两部分就OK了;#include #include using namespace std;int main(){ int n, t; cin >> t; while (t--) ... 阅读全文
posted @ 2013-10-03 16:34 xindoo 阅读(160) 评论(0) 推荐(0) 编辑