
HDOJ
vsooda
这个作者很懒,什么都没留下…
展开
-
HDU1166提交编译不通过,改后通过,变量要一定定义
//1166 本机通过,提交不通过#include#includeint main(){//freopen("1166.txt","r",stdin);int m,n,t=1;int shu[50001];scanf("%d",&m);while(m--){printf("Case %d:\n",t++);int i;scanf("%d",&n)原创 2012-02-14 14:17:42 · 620 阅读 · 0 评论 -
HDU 1173
#include#include#includeusing namespace std;const int MAXN=1000005;double a[MAXN],b[MAXN];int main(){ int i,n; while(scanf("%d",&n),n) { for(i=0;i scan原创 2012-02-14 17:57:36 · 1020 阅读 · 0 评论 -
HDU 1172
#includeint test(int x,int y,int a[][3]){int b[4],c[4],s=0,t=0,i,j,d[4]={0,0,0,0};c[0]=x%10;c[1]=(x/10)%10;c[2]=(x/100)%10;c[3]=(x/1000)%10; b[0]=a[y][0]%10;b[1]=(a[y][0]/10)%10;b[2]=原创 2012-02-14 16:16:51 · 1015 阅读 · 0 评论 -
HDU 1106
#include#include#includeint cmp(const void*a,const void*b){ return *(int *)a-*(int *)b;}int main(){ char number[1001]; while(scanf("%s",number)!=EOF) { int i,len,k=0,flag=0;原创 2012-02-09 20:49:46 · 761 阅读 · 0 评论 -
HDU1108
#includeint gcd(int a,int b){int i;for(i=a;i>=1;i--){if(a%i==0)if(b%i==0)return i;}}int main(){int m,n;while(scanf("%d %d",&m,&n)!=EOF){int t=gcd(m,n);printf("%d\n",m原创 2012-02-13 22:24:58 · 801 阅读 · 0 评论 -
HDU 1107
acm中为了避免大量数据的输入,可以加入一句freopen("1107.txt","r",stdin);就可以了,其他都不用改变在主函数返回之前关闭文件fclose(stdin);#include#includetypedef struct Man{char name;int nl,wy,hp;int dirx,diry;struct Man *原创 2012-02-13 22:03:38 · 775 阅读 · 0 评论 -
HDU 1174
#include#include #define eps 1e-8#define zero(x) (((x)>0?(x):-(x))typedef struct point{double x,y,z;}point;int main(){ int T; double h1,r1,x1,y1,z1,tmp,s1,s2; double原创 2012-02-14 18:43:39 · 727 阅读 · 0 评论 -
HDU 2072 单词统计
#include#include#include#includeusing namespace std;int main(){set st;string s="";char c;while((c=getchar())!='#'){s+=c;while(c!='\n'){while((c=getchar())!=' '&& c!='\n')原创 2012-02-18 19:31:42 · 563 阅读 · 0 评论 -
HDU 2037 vc编译问题
vc不通过,提交通过#include#includestruct c{int x;int y;int ord;}d[100];int cmp(const struct c *a, const struct c *b){ if ((*a).x == (*b).x) return (*a).y - (*b).y; e原创 2012-02-17 12:36:26 · 555 阅读 · 2 评论 -
HDU 2041
由题目可知,每次只能走一级或两级。因此从第一级走上第二级只能走一步,只有1种走法。从第一级走上第三级,可以从第一级直接走两步,也可以从第二级走一步。有2种走法走上第n级,可以从第n-1级走一步上来,也可以从第n-2级走两步上来。即:f(2) = 1f(3) = 2f(n) = f(n-1) + f(n-2) (n > 3)是一个斐波那契函数。 数值可能很原创 2012-02-17 18:07:24 · 1473 阅读 · 0 评论 -
2082 母函数
2082 找单词Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26。那么,对于给定的字母,可以找到多少价值Input 输入首先是一个整数N,代表测试实例的个数。然后包括N行数据,每行包括2转载 2012-02-19 09:34:53 · 487 阅读 · 0 评论 -
HDU 2057
#includeint main(){__int64 a,b;while(scanf("%I64X%I64X",&a,&b)!=EOF)printf(a+breturn 0;}原创 2012-02-18 12:40:47 · 984 阅读 · 0 评论 -
HDU 2048 2049 2068 错排题
2048 神、上帝以及老天爷Problem Description HDU 2006'10 ACM contest的颁奖晚会隆重开始了!为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动,这个活动的具体要求是这样的:首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;然后,待所有字条加入完毕,每人从箱中取一个字条;最后,如果取得的原创 2012-02-18 18:45:18 · 2945 阅读 · 0 评论 -
HDOJ题目分类
动态规划:2037 2054 2084hdu题目分类(转)http://apps.hi.baidu.com/share/detail/170531541001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1、2、3、4、5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索转载 2012-02-14 16:58:31 · 6295 阅读 · 0 评论 -
hdu 2063 二分图匹配
效率较高:#include #include #include #include using namespace std;typedef struct node{ int ord; node * next;}Node;const int size = 512+1;Node list[size];int X[size];int Y[size];bool visi原创 2012-04-11 14:06:22 · 588 阅读 · 0 评论 -
HDU 2830 最大完全矩阵
联系1505,1506, 2870最大完全子矩阵,以第i行为底,可以构成的最大矩阵,因为该题可以任意移动列,所以只要大于等于 a[i][j]的都可以移动到一起,求出 a[i][k]>=j(0出 高度为j的出现的次数,然后逆序扫一遍 高度大于j的次数c[j];#include#includeusing namespace std;const int N = 1005;int原创 2012-08-29 15:07:46 · 882 阅读 · 0 评论 -
HDU 1421 差的平方和最小
状态Dp[i][j]为前i件物品选j对的最优解当i=j*2时,只有一种选择即 Dp[i-2][j-1]+(w[i]-w[i-1])^2当i>j*2时,Dp[i][j] = min(Dp[i-1][j],Dp[i-2][j-1]+(w[j]-w[j-1])^2)如果个数刚好,则从小到大依次开始搬可以疲劳度最小。而如果n != 2 * k,则需要动态规划。#incl原创 2012-08-29 17:45:16 · 692 阅读 · 0 评论 -
HDU 1058 Humble Numbers
如果一个数是Humble Number,那么它的2倍,3倍,5倍,7倍仍然是Humble Number定义F[i]为第i个Humble NumberF[n]=min(2*f[i],3*f[j],5*f[k],7*f[L]), i,j,k,L在被选择后相互移动(移动方法:被选择的数,下标加1)(通过此题理解到数组有序特性)#include using namespace s原创 2012-08-29 19:36:23 · 481 阅读 · 0 评论 -
HDU 1006
Problem DescriptionThe three hands of the clock are rotating every second and meeting each other many times everyday. Finally, they get bored of this and each of them would like to stay away from转载 2012-08-19 09:31:37 · 1145 阅读 · 0 评论 -
HDU 1978 到达终点有多少种方式
以为很复杂,但是代码其实很直观。#include #include #define N 101int dp[N][N];int main (){ int t,n,m,i,j,k,l,num; scanf("%d",&t); while (t--) { scanf ("%d %d",&n,&m); memset(dp,0,sizeof(dp)); dp[0][0]=原创 2012-08-30 09:00:57 · 829 阅读 · 0 评论 -
HDU 1114 完全背包
完全背包与01背包不同之处在于,每件物品的数量都是无限的。在处理的时候:01背包是后面的前面dp, 完全背包是从前面到后面dp一下是代码,本来可以1A的,没注意到输出数字后面还要输出一个点#include using namespace std;const int M = 100000000;const int W = 10001;int dp[W];int w[501],原创 2012-08-30 14:22:06 · 2391 阅读 · 0 评论 -
HDU 2870 最大子矩阵,联系1505, 1506
题目意思:w x y z 可以转化,求最大子矩阵。思路:枚举后转换为 hdu 1505 hdu 1506 的情况。可以转化为a的有:w,y, z可以转化为b的有:w,x, z可以转换为c的有:x, y, z所以a, w, y, z一组b, w, x, z一组c, x, y, z一组分别dp#include #include using原创 2012-02-23 22:03:06 · 963 阅读 · 0 评论 -
HDU 2191 简单01背包
1A#include using namespace std;const int N = 105;const int MAXW = 4005;int v[N], w[N], num[N];int dp[MAXW];int max(int x, int y){ if(x > y) return x; else return y;}int main(){ i原创 2012-08-30 09:29:19 · 2549 阅读 · 0 评论 -
HDU 1257 最少拦截系统
感觉跟dp没有什么关系,就只是贪心而已。代码很简单,1A#include #include using namespace std;const int N = 10000000;int dp[1000];int len;int max(int *dp){ int max = 0; for(int i = 0; i < len; i ++) { if(max <原创 2012-08-29 15:43:53 · 516 阅读 · 0 评论 -
HDU 1023 卡特兰数
//h( n ) = ( ( 4*n-2 )/( n+1 )*h( n-1 ) );#include//*******************************//打表卡特兰数//第 n个 卡特兰数存在a[n]中,a[n][0]表示长度;//注意数是倒着存的,个位是 a[n][1] 输出时注意倒过来。 //*********************************原创 2012-08-21 10:04:11 · 2140 阅读 · 0 评论 -
hdu 1011 tree dp+背包 有trick
刚开始我以为是比较熟悉的树形dp+背包,但一直wa,网上的代码是非递归的,看到我头晕,看了大牛的代码后才发现有Trick... 发下代码,给有同样问题的人参考下/* 题意:给出一棵树,每个点有权值,要取得这个权值需要代价,通过父亲后才能到达儿子 问能量有限时获得的最大值 直接tree dp+背包 注意的是,每个点至少要有一个人,即使没有bug转载 2012-08-20 10:42:03 · 714 阅读 · 0 评论 -
HDU 1159 最长公共子序列
f(i,j)= {f(i-1,j-1)+1 (a[i]==b[j])max(f(i-1,j),f(i,j-1)) (a[i]!=b[j]) 由于f(i,j)只和f(i-1,j-1), f(i-1,j)和f(i,j-1)有关, 而在计算f(i,j)时, 只要选择一个合适的顺序, 就可以保证这三项都已经计算出来了, 这样就可以计算出f(i,j). 这样一直推到f(len(a),len(b))就原创 2012-02-21 12:33:01 · 687 阅读 · 0 评论 -
HDU 1789 做作业使罚分少,贪心
贪心。先考虑分值大的作业,如果使其在截至日期当天做,如果当天已经被占用,那么往前推一天,如果前面的全部被占用,则该作业无法完成。1A,编程出了点情况,浪费了时间,跟踪比阅读代码好用。能较快找到问题。#include using namespace std;const int N = 1001;int a[N];//时间int b[N];//扣分int flag[N];//是否原创 2012-08-29 21:33:48 · 1334 阅读 · 0 评论 -
HDU 1024 最大M子段和 滚动数组优化
1. 对于前n个数, 以v[n]为底取m段:当n==m时,Sum[m][n]=Sum[m-1][n-1]+v[n],第n个数独立成段;当n>m时, Sum[m][n]=max{Sum[m-1][k],Sum[m][n-1]}+v[n]; 其中,m-12. 空间的优化:通过状态方程可以看出,取m段时,只与取m-1段有关,所以用滚动数组来节省空间#include using n原创 2012-08-30 16:26:35 · 1996 阅读 · 0 评论 -
HDU 1078 DP + 记忆搜索
dfs!#includeusing namespace std;int gra[101][101];int dp[101][101];//表示从i行j列能够获得的最大收益int n,k;int dir[4][2]={-1,0,1,0,0,-1,0,1};int dfs(int i,int j) //记忆法搜索{ int s,t,p,q,temp,m=0; if(dp[i][原创 2012-08-31 08:30:08 · 601 阅读 · 0 评论 -
HDU 1081 最大子矩阵
#include #include int main() { const int size = 101; int Max,sum; int N,i,j,k,val,a[size][size]; while (scanf("%d",&N)!=EOF) { memset(a,0,sizeof(a)); Max = -128; fo原创 2012-08-31 08:57:14 · 954 阅读 · 1 评论 -
HDU 2844 多重背包 二进制压缩
#include #include const int N = 100010; int dp[N];//将钱视为背包的容量 int val[104], num[104], n, V; //V限制的钱 void CompletePack(int val)//完全背包 { for(int i = val; i <= V; i++) dp[i] = dp[i-val] | dp原创 2012-08-28 09:41:10 · 949 阅读 · 0 评论 -
HDU 1160 最长下降子序列(错误代码也可能通过,误导啊)
写的代码有点垃圾,改天优化一下。#include #include using namespace std;const int N = 1001;int dp[N];int front[N];int p[N];typedef struct { int weight; int speed; int num;} mice;mice mouse[N];bool cm原创 2012-08-30 20:57:48 · 566 阅读 · 0 评论 -
HDU 1080 最长公共子序列变形
要注意i,j的下标是从1开始到n, m在编码过程中,刚开始一直出错,后来发现初始少了两句for(int i = 1; i dp[i][0] = dp[i-1][0] + r[a[i-1]][4];for(int i = 1;i dp[0][i] = dp[0][i-1] + r[4][b[i-1]];#include using namespace std;原创 2012-09-01 20:41:15 · 1241 阅读 · 0 评论 -
HDU 1074 状态压缩dp
原文地址:http://www.cnblogs.com/Kenfly/archive/2011/03/30/2000364.html题目: http://acm.hdu.edu.cn/showproblem.php?pid=1074题意: 学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一天则扣掉一单位学分, 要你求出完成所有作业而被扣最小的学分转载 2012-09-02 09:51:12 · 667 阅读 · 0 评论 -
HDU 1158 雇佣决策 动态规划,只要肯用空间,时间,这题就是简单题
状态表示: Dp[i][j]为前i个月的留j个人的最优解;Num[i]j>Max{Num[i]}之后无意义,无谓的浪费 记Max_n=Max{Num[i]};Dp[i-1]中的每一项都可能影响到Dp[i],即使Num[i-1]所以利用Dp[i-1]中的所有项去求Dp[i];对于Num[i]当k>j时, 解雇 然后求出最小值Dp[i][j]=min{Dp[i-1][k…Max原创 2012-09-01 18:05:40 · 733 阅读 · 0 评论 -
HDU 1027 全排列
#include#include#include#includeusing namespace std;int n,m;int sequence[1010];int main(){ int i,j,k; while(scanf("%d %d",&n,&m)!=EOF) { sequence[0]=0; for(i=1;i<=n;i++) { sequence原创 2012-08-23 11:09:35 · 996 阅读 · 0 评论 -
HDU 1029 高频词统计
1,最自然的想法,使用map记录每个词出现的次数#include#include#includeusing namespace std;int main(){ int n; while(scanf("%d",&n)!=-1) { map m; int i; int lim=(n+1)/2; for(i=0;i<n;i++) { int temp;原创 2012-08-23 14:13:14 · 580 阅读 · 0 评论 -
HDU 1227 距离和最小,转移方程!
这里需要一个常识:在i到j取一点使它到区间每一点的距离之和最小,这一点为(i+j)/2用图形即可证明;Dp[i][j]=max{Dp[i-1][k]+cost[k+1][j] 其中,(i-1)代码很容易编写:#include #include using namespace std;const int N = 205;const int M = 32;int dp[M][原创 2012-09-03 14:34:04 · 1042 阅读 · 0 评论 -
HDU 1300
Dp[i]=min{Dp[j]+V}, 0题目默认每个输入的价格递增,如果非递增,会麻烦一些。#include #include using namespace std;const int N = 105;const int INF = 9999999;int dp[N];int a[N];int p[N];int sum(int x, int y, int p){原创 2012-09-02 21:43:09 · 1187 阅读 · 2 评论