- 博客(31)
- 收藏
- 关注
原创 POJ 2828 线段树
题意:n个人陆续到一个队列排队,但是有的人可能会插队,题目给出第i个人插在pos[i]的位置,问最后队列的情况如何。 建一棵(1,n)的线段树,每个节点的值表示该区间的空位,从最后一个人往前插,这样pos的意义就成了插入是他前面有几个空位
2014-04-30 09:11:21 474
原创 HDU 1394 线段树 || 归并排序
给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找出其中最小的一个输出! 暴力。。线段树。。。归并排序。。。都可以 暴力:
2014-04-29 19:41:07 597
原创 HDU 3744 水
题目意思: 有n个人在比m米的比赛,现在给出这n个人的当前位置,(起点为0,0-399),以及这n个人的排名,问我么给出的排列是否正确 暴力求解。。
2014-04-29 17:11:34 510
原创 POJ 2299 && HDU 3743 离散化+线段树
给出一个长度为n的数列,你每一次可以随意交换其中两个数字的位置。问你至少交换几次,才能使得这个数列是个单调递增数列。 最多50W
2014-04-29 16:05:06 674
原创 HDU 1337 水
规律。。 #include "stdio.h" #include "math.h" int main() { int n,a; scanf("%d",&n); while (n--) { scanf("%d",&a); printf("%d\n",(int)sqrt((double)a)); } return 0;
2014-04-28 15:42:19 543
原创 HDU 1421 DP
先qsort dp[i][j]=min(dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]),dp[i-1][j]);
2014-04-28 14:41:10 484
原创 HDU 1466 DP
n条直线互不平行且无三线共点的最多交点数max=1+2+……(n-1)=n(n-1)/2, 所以n=20的话,最大的交点数是190 本题是求有多少种交点数: 容易列举出N=1,2,3的情况: 0 0,1 0,2,3 如果已知的情况,我们来分析加入第N条直线的情况(这里N=4): 1、第四条与其余直线全部平行 => 无交点; 2、第四条与其中两条
2014-04-28 13:54:17 459
原创 HDU 1502 DP+大数
转移方程 ans[n][n][n]=ans[n-1][n][n]+ans[n][n-1][n]+ans[n][n][n-1];
2014-04-27 09:54:46 466
原创 HDU 1559 最大子矩阵
对数据进行压缩 然后枚举每个矩形即可 #include "stdio.h" #include "string.h" #include "math.h" int a[1001][1001]; int main() { int ans,count,k,t,n,m,x,y,i,j; scanf("%d",&t); while (t--) { scanf("%d%d%d%d",&n,&
2014-04-26 15:05:16 483
原创 HDU 1428 最短路+记忆化搜索
他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近(否则可能永远都到不了机房了…” 这句话一定要理解清楚。就是说,对于当前位置,如果下一个状态与终点的最短距离大于或者等于当前位置到终点的最短距离,那么这个下一个状态是不可取的!到此,就能明白,此题就是求出所有点与终点的最短距离,然后再从起点进行记忆化搜索。 #include "queue" #include
2014-04-26 14:43:51 616
原创 HDU 1864 背包
01背包 水 注意判断好发票是否可用即可 #include "stdio.h" #include "math.h" #include "string.h" int num[31],dp[3001000]; int main() { int n,a,m,b,c,k,ok,i,j; double x,q,sum; char ch,str[101]; while (scanf("%lf%
2014-04-23 14:32:55 508
原创 HDU 1861 模拟
水题模拟 #include "stdio.h" #include "string.h" int main() { int ans,x,y,n; double sum; int a[101]; char ch,str[101]; memset(a,-1,sizeof(a)); sum=0;ans=0; while (scanf("%d",&n)!=EOF) { if (n==-
2014-04-23 12:14:50 528
原创 HDU 1331 poj 1579记忆化搜索
记忆化搜索 水 #include "stdio.h" #include "string.h" int dp[21][21][21]; int dfs(int a,int b,int c) { if (dp[a][b][c]) return dp[a][b][c]; if (a<=0 || b<=0 || c<=0) return 1; if (a<b && b<c) return
2014-04-23 10:50:30 504
原创 HDU 1978 DP
简单DP #include "stdio.h" #include "string.h" #include "math.h" int main() { int t,n,m,i,j,x,y; int a[101][101]; int dp[101][101]; scanf("%d",&t); while (t--) { scanf("%d%d",&n,&m); for (i=1;
2014-04-23 10:35:11 440
原创 HDU 3336 记忆化搜索
参考这个写的: http://blog.csdn.net/akof1314/article/details/5473837 #include "stdio.h" #include "string.h" char str[200010]; int b[200010]; int main() { int t,n,ans,k,i,j,m; scanf("%d",&t); while (
2014-04-21 15:28:32 444
原创 HDU 1059 背包
#include "stdio.h" #include "string.h" int main() { int Case,k,key,sum,i,j; int dp[60010]; int a[10]; Case=1; while (scanf("%d",&a[1])!=EOF) { sum=a[1]; for (i=2;i<=6;i++) { scanf("%d"
2014-04-21 09:50:43 427
原创 HDU 1544 水爆搜
从每个位置往两边枚举即可 #include "stdio.h" #include "string.h" int main() { int le,sum,a,b,i; char str[5100]; while (gets(str)) { le=strlen(str); sum=le; for (i=1;i<=le-2;i++) { a=b=i; a
2014-04-15 20:42:05 591
原创 HDU 1557 水爆搜
#include "stdio.h" int n,sum,key; int a[21]; void dfs(int w,int k,int cnt) { if (k>n) return ; if (w==k) dfs(w,k+1,cnt); else { cnt+=a[k]; if (cnt>=key && cnt-a[w]<key) sum++; dfs(w,k+1,
2014-04-15 20:32:25 559
原创 HDU 1195 双广
双广模板题 #include "iostream" #include "algorithm" #include "queue" using namespace std; struct node { int x[4]; int step; }; int a,b,ans; int hash1[10][10][10][10],hash2[10][10][10][10]; void b
2014-04-10 15:23:02 534
原创 HDU 1728 搜索
#include "iostream" #include "algorithm" #include "queue" using namespace std; int dir[4][2]={1,0,-1,0,0,1,0,-1}; struct node { int x,y,k; }; int k,x1,x2,y1,y2,ok,n,m; int hash[201][201]; char m
2014-04-02 10:45:01 442
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人