摘要: 代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#define MAXN 105using namespace std;int N, M, p[MAXN], v[MAXN], num[MAXN], dp[MAXN];int zo_bag(int v, int p){ for (int i = N; i >= p; --i) { dp[i] = max(dp[i], dp[i-p]+v); }}int c_bag(int x){ int 阅读全文
posted @ 2012-05-02 22:27 沐阳 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 题意就不多说了,刚开始还在用搜索来写,定了两个方向,标记去重,各种,然后就TLE了。正解就是枚举行方向的量,再控制列方向的量,使得行和列上的偏移量不超过规定的步数即可,在没有每一次memset的情况下,注意在枚举的时候去掉自己这个点。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#define MOD 10000#define MAXN 105using namespace std;int G[MAXN][MAXN], n, m;int dp[MAXN][MAXN];inline int 阅读全文
posted @ 2012-05-02 21:55 沐阳 阅读(325) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1789题义是给定一个作业序列,求如何分配使得得到的分数最多。设 dp[i][j] 代表截止到第i个作业,第j天所能够完成的最多分数。dp方程为:if (1<= j <= e[i].time) dp[i][j] = max(dp[i-1][j], d[i-1][j-1]+e[i].score);if (e[i].time+1 <= j <= Last) dp[i][j] = max(dp[i-1][j], dp[i][j-1]);代码如下:#include <cstdlib> 阅读全文
posted @ 2012-05-02 19:55 沐阳 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 题目意思很好懂。暴力的想法是在已知的丑数中选出最小的,保存之,然后乘以2,3,5,7保存起来,这里要注意去重。不得不说其英文输出很坑爹。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <map>#include <iostream>#define MAXN 5850using namespace std;int n, a[4] = {2, 3, 5 ,7};long long ans[MAXN]; prio 阅读全文
posted @ 2012-05-02 17:28 沐阳 阅读(294) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1421 题义是给定N个物品,从中选取K对,每取一对的花费是两个物品重量之差的平方。求最后采用何种策略才能使得总的花销最少。 该问题的限制条件是取K对以及物品的个数,因此在不优化的情况下,我们使用dp[i][j]来表示在前i见物品中选取j对的最少花费。那么就有动态转移方程: dp[i][j] = min(dp[i-1][j], dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1])); 代码如下:#include <cstdlib>#include <cstring& 阅读全文
posted @ 2012-05-02 14:36 沐阳 阅读(412) 评论(0) 推荐(0) 编辑