
HDU
南宮逸辰
喜欢听音乐,ACM旅途中
展开
-
HDU-1520-Anniversary party
今天算第一次看树形DP,网上找了资料,恰好有一个练习题,便仿着做了。方法其实比较简单,跟线性DP差不多,只是多了树的操作。直接贴代码:#include#include#include#define MAX 6001using namespace std;struct node{ struct node *first_child; struct node *ne原创 2013-02-08 03:23:24 · 376 阅读 · 0 评论 -
HDU-1003-Max Sum
简单的动态规划题。代码:#include#define MAX 100001typedef struct Number{ int num; int sum; int ipos;}Number;void main(){ int n,m,i,j,sum,ipos,result,summax; Number num[MAX]; whil原创 2013-03-07 21:45:08 · 581 阅读 · 0 评论 -
HDU-1619-Unidirectional TSP
这个题属于一个比较简单的DP题,状态转移方程也就为其3个方向的转移,比较简单。需要注意上下边界的特殊处理。代码:#include#include#include#define MAX 102using namespace std;int m,n;int map[MAX][MAX],nxt[MAX][MAX];long long dp[MAX][MAX];int main原创 2013-02-27 15:05:02 · 951 阅读 · 0 评论 -
HDU-4536-XCOM Enemy Unknown
当时比赛的时候看到200ms以为很难,以致于后面决定用BFS写的时候一直觉得会超时,就不是很用心。但最终发现居然这样做是对的,而且时间也仅仅只有15ms。可惜了吧,其实分析下便知道BFS应该是不会超时的~比较简单,直接枚举模拟即可。代码:#include#include#include#includeusing namespace std;int n,m,k;int p原创 2013-03-31 11:19:11 · 960 阅读 · 0 评论 -
HDU-4539-郑厂长系列故事——排兵布阵
这个题是腾讯马拉松的一个题,当时没做出来,今天看了下状态压缩,然后做了下。感觉跟POJ1185很像,基本上只是改一下。其实主要修改的只有2个地方,因为这个地所要求的是曼哈顿距离为2,所以在转移上一层状态的时候应该判断是否左右相邻。同时上层与上上层之间也同样需要做这样一个判断。代码:#include#include#includeusing namespace std;con原创 2013-03-31 11:17:07 · 2253 阅读 · 0 评论 -
HDU-4535-吉哥系列故事——礼尚往来
本来很简单的一个题,却因为取模的问题WA了几次~~~无语~这个题就是个错排,因为存在递推式的,也没什么难度,见代码吧~代码:#include#include#include#includeusing namespace std;const long long mod=1000000007;long long a[101];int main(){ int n;原创 2013-03-31 11:21:25 · 798 阅读 · 0 评论 -
HDU-4540-威威猫系列故事——打地鼠
今天最简单的一个题,DP做就好。代码:#include#include#include#includeusing namespace std;const int maxn=501;int n,k;int dp[2][501];int main(){ while(scanf("%d%d",&n,&k)!=EOF) { int cur=0; memset(原创 2013-03-31 22:51:43 · 1133 阅读 · 0 评论 -
HDU-4544-湫湫系列故事——消灭兔子
昨天这个题被数据量给吓着了,以为贪心没有办法做,结果今天才发现超多人都是用贪心做的。唉,是数据水了?今天用了2种方法做,其实昨天都有想过。优先队列:代码:#include#include#include#includeconst int maxn=10e4+10;using namespace std;struct row{ int di; int原创 2013-04-01 11:03:15 · 886 阅读 · 1 评论 -
HDU-4541-Ten Googol
腾讯马拉松的一个题,开始觉得比较难,后来强行模拟做的,还好吧。代码:#include#include#include#includeusing namespace std;int num[100]={4,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8};int a[100][100],cnt[100];void Init(){ num[2原创 2013-04-01 11:09:33 · 759 阅读 · 0 评论 -
POJ-3141-Distant Galaxy
同样题目 Hdu-3695 http://acm.hdu.edu.cn/showproblem.php?pid=3299 Uva-3695 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1696原创 2013-03-20 14:49:44 · 747 阅读 · 0 评论 -
HDU-2991-Generate random numbers
水题一道~代码:#include#include#include#includeusing namespace std;long long n;bool vis[10000];int main(){ while(scanf("%lld",&n)&&n) { memset(vis,0,sizeof(vis)); int ans=0; w原创 2013-05-20 08:58:25 · 595 阅读 · 0 评论 -
HDU-4554-叛逆的小明
金山西居比赛的第一题,算是水题吧~代码:#include#include#include#includeusing namespace std;int numa[11],numb[11];int main(){ int T,a,b; scanf("%d",&T); while(T--) { scanf("%d%d",&a,&b); int原创 2013-05-20 09:02:25 · 1200 阅读 · 0 评论 -
HDU-4556-Stern-Brocot Tree
网上有关于这个树的资料,其实它的一半就是法里数列相关资料:http://zh.wikipedia.org/wiki/%E6%B3%95%E9%87%8C%E6%95%B8%E5%88%97上面有递推公式,仅仅是需要用较快的方法求出欧拉函数。代码:#include#include#includeusing namespace std;const int maxn=100001原创 2013-05-20 09:09:21 · 1231 阅读 · 0 评论 -
HDU-1114-Piggy-Bank
比较简单的一个01背包问题代码:#include#include#includeusing namespace std;const int maxn=510;const int inf=1<<29;int a,b,n,m,w[maxn],c[maxn],dp[10010];int main(){ int T; scanf("%d",&T); whil原创 2013-07-06 20:53:18 · 579 阅读 · 0 评论 -
HDU-1203-I NEED A OFFER!
这个题是个背包问题,要求求出至少被一个学校录取的最大概率思路:将概率全部转换成不能录取,然后最后结果用1-p(不能录取即可)代码:#include#include#includeusing namespace std;const int maxn=10001;int n,m,cost[maxn];double p[maxn],dp[maxn];int main(){原创 2013-07-06 20:56:22 · 568 阅读 · 0 评论 -
HDU-1712-ACboy needs your help
数据比较弱,直接暴都可以,属于多重背包~代码:#include#include#includeusing namespace std;const int maxn=110;int n,m,a[maxn][maxn],dp[maxn];int main(){ while(scanf("%d%d",&n,&m)&&(n+m)) { memset(dp,0,siz原创 2013-07-06 20:58:04 · 516 阅读 · 0 评论 -
HDU-2159-FATE
比较简单的多重背包问题,直接暴力即可代码:#include#include#includeusing namespace std;const int maxn=110;const int inf=1<<29;int n,m,k,s,a[maxn],b[maxn],dp[maxn][maxn];int main(){ while(scanf("%d%d%d%d",&n原创 2013-07-06 20:59:47 · 446 阅读 · 0 评论 -
HDU-2191-悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
比较简单的多重背包问题代码:#include#include#includeusing namespace std;const int maxn=500;int n,m,w[maxn],c[maxn],num[maxn],dp[maxn];int main(){ int T; scanf("%d",&T); while(T--) { int原创 2013-07-06 21:01:03 · 1646 阅读 · 0 评论 -
HDU-2546-饭卡
特殊的01背包吧,先排序,然后当作01背包进行处理代码:#include#include#include#includeusing namespace std;const int maxn=1001;const int inf=1<<29;int n,m,a[maxn],dp[maxn];int main(){ while(scanf("%d",&n)&&n)原创 2013-07-06 21:02:39 · 592 阅读 · 0 评论 -
HDU-3466-Proud Merchants
以最低价格要求与实际价格的差值作为关键字进行排序,然后当作01背包处理即可代码:#include#include#include#includeusing namespace std;const int maxn=501;struct node{ int p; int q; int v; bool operator < (const node原创 2013-07-06 21:04:35 · 743 阅读 · 0 评论 -
HDU-2639-Bone Collector II
这个题是HDU-2602-Bone Collector升级版,改为求第k大的值思路:将背包的维数增加一维,存的时候注意去重~代码:#include#include#includeusing namespace std;const int maxn=1001;int n,m,k,dp[maxn][31],v[maxn],p[maxn];int main(){ i原创 2013-07-06 23:05:20 · 1339 阅读 · 0 评论 -
HDU-2844-Coins
这个题是一个多重背包问题,只不过要求你求出能够组合出不同数的个数,其实仔细看可以发现dp[i]==i满足这个条件的时候就应该找到对应的一个满足一个组合的数所以在多重背包计算完成以后只需要遍历一次,统计出dp[i]==i的个数即为答案代码:#include#include#includeusing namespace std;const int maxn=101;int n,m原创 2013-07-06 23:40:27 · 1047 阅读 · 0 评论 -
HDU-1671-Phone List
这个题目的就是求将所有字符串按字典序排序后,若前一个字符串能够在后面一个中找到则输出NO,否则输出YES比较简单~用strstr函数即可代码:#include#include#include#includeusing namespace std;const int maxn=10001;struct node{ char str[100]; bool op原创 2013-07-07 01:22:06 · 604 阅读 · 0 评论 -
HDU-1561-The more, The Better
这个题是树形DP,还不太会,参考了网上别人的代码做的代码:#include#include#include#includeusing namespace std;const int maxn=201;int n,m,e,head[maxn],pnt[maxn],nxt[maxn],cost[maxn],dp[maxn][maxn],f[maxn][maxn];bool vis原创 2013-07-07 14:55:28 · 645 阅读 · 0 评论 -
HDU-3033-I love sneakers!
这个题分组背包问题,只不过要求由通常的每组一件变成了现在的一组至少一件,用dp[i][j]表示到第i组花费为j的最大价值,转移的时候注意先尝试以当前组,后由上组向这组转换可以通过将dp数组初始化为-1,从而可以得到有效判断代码:#include#include#includeusing namespace std;const int maxn=101;int n,m,k,原创 2013-07-07 15:44:03 · 779 阅读 · 3 评论 -
HDU-1171-Big Event in HDU
多重背包问题,可以套模板~代码:#include#include#includeusing namespace std;const int maxn=51;int n,sum,v,a[maxn],b[maxn],dp[200001];void Complete(int cost,int weight){ for(int i=cost;i<=v;i++) dp[i]=原创 2013-07-06 20:54:38 · 530 阅读 · 0 评论 -
HDU-2602-Bone Collector
01背包问题,比较简单代码:#include#include#includeusing namespace std;const int maxn=1001;int n,m,v[maxn],p[maxn],dp[maxn];int main(){ int T; scanf("%d",&T); while(T--) { memset(dp,0,s原创 2013-07-06 21:18:56 · 525 阅读 · 0 评论 -
HDU-1672-Cuckoo Hashing
这个题就是判断二分图~代码:#include#include#includeusing namespace std;const int maxn=1e4+10;int n,m,map[maxn][3],color[maxn];bool vis[maxn];bool DFS(int x){ for(int i=0;i<2;i++) { int ita=map原创 2013-07-07 01:36:22 · 974 阅读 · 0 评论 -
HDU-1026-Ignatius and the Princess I
经过考试后小学期训练的第一个题~BFS,注意下输出路径时候的特殊处理即可。代码:#include#include#includeusing namespace std;const int maxn=103;struct node{ int x; int y; int ans; int pre; int res;}q[100001];原创 2013-06-23 14:06:56 · 613 阅读 · 0 评论 -
HDU-1045-Fire Net
比较简单的DFS题,直接暴力搜索即可。代码:#include#include#includeusing namespace std;int n,ans;char map[5][5];void DFS(int now){ ans=max(ans,now); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { bo原创 2013-06-23 16:52:12 · 557 阅读 · 0 评论 -
HDU-3535-AreYouBusy
这个题是综合性背包题吧,有3种类型的背包1、至少取一种2、至多取一种3、可以任意取代码:#include#include#includeusing namespace std;const int maxn=110;const int inf=1<<29;int n,t,m,dp[maxn][maxn],type[maxn],cnt[maxn],c[maxn][max原创 2013-07-09 21:38:30 · 740 阅读 · 0 评论 -
HDU-1885-Key Task
这个题是BFS,当时没做出来(题意理解有问题),后来知道题中的钥匙和门只有4种,就可以用BFS解决了,只是最后多记录一个当前有的钥匙的状态值去重即可。代码:#include#include#include#includeusing namespace std;const int maxn=111;struct node{ int x; int y; i原创 2013-06-25 22:47:31 · 1426 阅读 · 0 评论 -
HDU-1372-Knight Moves
BFS的题,没有用BFS做,而是用的Floyd做的代码:#include#include#includeusing namespace std;const int inf=1<<28;int map[9][9][9][9],movex[8]={1,1,-1,-1,2,2,-2,-2},movey[8]={2,-2,2,-2,1,-1,1,-1};void Init(){原创 2013-06-25 22:53:34 · 577 阅读 · 0 评论 -
HDU-2612-Find a way
这个题仍然属于BFS题,要求是求出2个人能够在KFC相遇最小总时间,思路是2次进行BFS搜索,记录2个人到所有KFC的距离,然后枚举取最小值即可需要注意的是,其中可能某些KFC需要穿过某些KFC~WA了很久代码:#include#include#include#includeusing namespace std;const int maxn=211;struct node原创 2013-06-25 23:00:51 · 518 阅读 · 0 评论 -
HDU-Open the Lock-1195
这个题也是一BFS题,搜索的时候注意变化的要求,即9加1等于1,1减1等于9,需要注意每次加减操作都只能是1用数组保存比较方便,刚开始想过直接搞~WA了好久~代码:#include#include#include#includeusing namespace std;struct node{ int num[4]; int ans;};queue q原创 2013-06-25 23:03:53 · 493 阅读 · 0 评论 -
HDU-1495-非常可乐
这个题是BFS题,只要注意相应倾倒的策略即可,剩下的就是细节。唉~因为几个策略代码比较类似,我直接复制,结果导致忘了将n改为m,WA了N久~悲剧代码:#include#include#include#includeusing namespace std;const int inf=1<<28;struct node{ int res; int a;原创 2013-06-25 23:07:54 · 1069 阅读 · 0 评论 -
HDU-1864-最大报销额
这个题是一个背包题,要求求出能够报账的最大金额思路:把每张发票的报账总额算出来,然后跑一次01背包即可注意:1、如果发票中含有A、B、C以外的项目,则不可以报账2、发票中可能含有多个A项目,判断超总额的时候需先累加3、对小数的处理可以先乘以100代码:#include#include#includeusing namespace std;const int原创 2013-07-11 23:26:24 · 572 阅读 · 0 评论 -
HDU-1072-Nightmare
这个题属于BFS,最麻烦的在于其中为4的地方可以恢复时间,去重的时候按最优选择即可,即以得到剩余逃生时间更多作为更优状态进行去重即可。代码:#include#include#include#includeusing namespace std;struct node{ int x; int y; int t; int ans;};cons原创 2013-06-25 22:57:27 · 531 阅读 · 0 评论 -
HDU-1253-胜利大逃亡
这个题比较坑的BFS吧,注意如果判边界的话可能会超时,最好先人为加边界,然后进行搜索,搜索最好是队尾判断,因为可能出现起点和终点相同的数据~WA了很久代码:#include#include#includeusing namespace std;const int maxn=52;struct node{ int x; int y; int z;原创 2013-06-25 23:05:59 · 542 阅读 · 0 评论 -
HDU-3335-Divisibility
题意是说给你一列数,让你从中选出最多的数能够使得其两两之间不能整除二分图匹配,求最小路径覆盖即可代码:#include#include#includeusing namespace std;const int maxn=1001;long long n,a[maxn],match[maxn];bool map[maxn][maxn],vis[maxn];bool find原创 2013-07-12 13:14:40 · 793 阅读 · 0 评论