hdu 1224 Free DIY Tour–最長升子序列

/*最長上升子序列問題,或者說比那還簡單,城市是按編號從小到大輸入的找到從1開始可以飛到n+1的航線,途中經過的城市的興趣值最高注意:只可以從1開始,到n+1,還要記錄路徑*/#include<stdio.h>#include<string.h>int a[110],b[110],c[110],d[110][110];int num=0,n,m;int main(){int

hdu 1025 Constructing Roads In JGShining’s Kingdom–最長上升子串(時間最佳化)

/*本題也是最長上升子序列同以往不一樣的是,需要在時間上做最佳化以往是開一數組,假設為f[i]表示到i能修多少路到計算f[q]時,需要遍曆q之前的,找到a[i]<a[q](a[]存資料)且f[]最大的,然後加1,就是f[q],這樣太浪費時間一種最佳化是把f[]相同的合并於是,像本題,用dp[i]存長度為i的最小的資料,如本題存修i條路時,號碼最小的富裕城市到計算dp[q]時,給root[q](存和q有修路意向的富裕城市)找一個合適的地方(不比root[q]小,比他小的會與他交叉,若它前面的

hdu 1074 Doing Homework–狀態壓縮

/*狀態壓縮*/#include<stdio.h>#include<string.h>#include<stdlib.h>struct ke{char name[110];int cost,end;}k[20];//存科目資訊,cost是花費的時間,end是截止時間struct node{int

poj 1273 Drainage Ditches–最大流–Dinic

/*之前用EK寫過這題,現在學dinic,又寫了這個題*/#include<stdio.h>#include<string.h>#include<queue>using namespace std;int map[205][205],lvl[205];int n,m,ret;int bfs()//分層{int u,i;memset(lvl,0,sizeof(lvl));queue<int>q;q.push(1);lvl[1]=1;while(!q.

hdu 1158 Employment Planning–DP

/*用數組a[]來存每個月最少的僱用人數;max=11;表示a[]中的最大值;dp[i][j]表示第i個月,僱傭j個人時,這i個月的花銷;這裡要注意,dp[i][j]不是第i個月的花銷,而是從第1個月到第i個月的總花銷; DP 就是找階段,3個月就分了3個階段;第一個階段:第一個月,僱用人數為a[1]-max;我們要算出 dp[1][a[1]]~dp[1][max];第二個階段:第二個月,僱用人數為a[2]-max;我們要算出 dp[2][a[

hdu 1421 搬寢室–類背包問題

/*可以說是背包問題吧:背包容量為k組,從n個中挑k組因為要平方差最小的,故配組的時候一定是相鄰的兩個,共有n-1組,求出每組的平方差所求就變成了從n-1個數中跳k個和最小的(好像挺簡單,但是不能把同一個物品搬兩次吧,求相鄰的兩個數的平方差的時候,除了頭尾,其餘物品都算了兩次)所以用動態規劃*/#include<stdio.h>#include<algorithm>using namespace std;#define Min(a,b) ((a)<(b)?(a):(

poj 1273 Drainage Ditches–最大流–sap

/*sap的非遞迴實現 0ms 還不錯讓人糾結的啊 我寫的是吧d[]初始化為0 WA看別人的模版初始化為m,過了又看到別人用數組標記,過了(貌似也不對,居然過了)我寫了一個數組標記訪問,沒過*/#include<stdio.h>#include<string.h>#include<queue>using namespace std;const int N=300;const int inf=0x7fffffff;int map[N][N];int

hdu 1081 To The Max最大連續子串和

/* 一維的情況很簡單,如何把一維的情況轉化為二維情況呢?例如,對於本題的測試資料: 0 -2 -7 0 9 2 -6 2-4 1 -4 1-1 8 0 -2我們可以每次任選幾行,壓縮成一行,這樣就轉化為了一維情況。例如,我們求1-2行中的最大子矩陣:即矩陣高為2(1-2行),寬為4的矩陣,可以先把1-2行相加,得到9 0 -13 2,再求這個單行的最大子段,由此就可以求得1-2行的最大子矩陣。*/#include<stdio.h>#include<string.

poj 1160 Post Office–DP–類背包問題

/*經典DP也可以說是背包問題:每個郵局佔據一些村莊,求恰好佔據完這些村莊時,距離的最小值(沒有使用的那段代碼可以這麼理解)1、考慮在V個村莊中只建立【一個】郵局的情況,顯然可以知道,將郵局建立在中間的那個村莊即可。也就是在a到b間建立一個郵局,若使消耗最小,則應該將郵局建立在(a+b)/2這個村莊上(可以通過畫圖知道)。2、下面考慮建立【多個】郵局的問題,可以這樣將該問題拆分為若干子問題,在前i個村莊中建立j個郵局的最短距離,是在前【k】個村莊中建立【j-1】個郵局的最短距離 與 在【k+1】

hdu 1208 Pascal’s Travels–DP

/*map[ i ][ j ]表示跳幾格 f [ i ][ j ] 表示有幾種條法其實就是一個子狀態繼承問題,如果map[ i ][ j ]為k,那麼 f [ i+k ][ j ] 和f[i][j+k] 就可以增加 f [ i ][ j ]種跳躍方法了。*/#include<stdio.h>#include<string.h>char map[55][55];__int64 f[55][55];int main(){int n,i,j;while(scanf("%d"

hdu 1243 反恐訓練營–LCS

/*LCS*/#include<stdio.h>#include<string.h>#define max(a,b) (a)>(b)?(a):(b)int n;char s1[2010],s2[2010];int fen[2010],d[2010][2010];int main(){int i,j,len1,len2;while(scanf("%d",&n)!=-1){getchar();gets(s1);for(i=0;i<n;i++)scanf("

hdu 1203 I NEED A OFFER!–01背包

/*01背包問題*/#include<stdio.h>double dp[10010],g[1010];int m[1010],qian;double p(double w,int i){return 1-(1-w)*(1-dp[i]);}void zopack(int c,double w){int i;double gg;for(i=qian;i>=c;i--){gg=p(w,i-c);dp[i]=gg>dp[i]?gg:dp[i];}}int main(){int

hdu 1069 Monkey and Banana–最長遞增子序列

/*跟矩陣嵌套一樣*/#include<stdio.h>#include<stdlib.h>int num=0;struct node{int x,y,z;}blocks[200];int high[200];int cmp(const void *a,const void *b){struct node *c=(struct node *)a,*d=(struct node *)b;if(c->x!=d->x)return

poj 1159 Palindrome–最長公用子串

/*本題主要就是最長公用字串(同他自己的反串)所求就是其長度-公用字串的長度同時本題用到空間壓縮,否則可能記憶體用超我是用的兩行的數組,輪流做當前行*/#include<stdio.h>#include<string.h>char s[5050];int p[2][5050],n,z;void dp(){z=0;memset(p,0,sizeof(p));int i=n-1,j;for(;i>=0;i--){for(j=1;j<=n;j++){if(s[i]=

poj 2965 The Pilots Brothers’ refrigerator–棋盤–深搜

/*深搜簡單,但是不熟練,犯了很多錯誤(七個)*/#include<stdio.h>char map[5][5];int i;int e=0;int step[20],st=0;int check(){if(e==0)return 1;return 0;}void zhi(int x,int y){int

hdu 1315 Don’t Get Rooked–深搜

/*本題用深搜,儘可能多的安排rook*/#include<stdio.h>char map[4][4];int x[20],y[20],c[20],num,n,no;int xing(int i,int j){if(c[j]==0)return 0;if(x[i]!=x[j]&&y[i]!=y[j])return 0;if(x[i]==x[j]){int k=y[i],l=y[j],t;if(k>l){t=k;k=l;l=t;}for(;k<=l;k++

poj 1837 Balance–01背包

// 01背包//參考http://blog.csdn.net/lyy289065406/article/details/6648094//基本就是抄過來了 呵呵 學習學習#include<iostream>using namespace std;int shu[21][15001];int main(){int

poj 1566 Haiku Review

/*就是找由/分割的三句話中syllables(不連續的a,e,i,o,u,y算一個)的數量若符合給出的5:7:5,輸出Y;否則輸出第一個不符合的句子的號碼*/#include<stdio.h>#include<string.h>char s[250];int a[3],n;int ha(char p){if(p=='a'||p=='e'||p=='i'||p=='o'||p=='u'||p=='y')return 1;return 0;}int main(){int

poj 2195 Going Home–最小費用最大流–spfa–動態數組–或者用 最小權匹配

/*題意:給定一個N*M的地圖,地圖上有若干個man和house,且man與house的數量一致。man每移動一格需花費$1(即單位費用=單位距離), 一間house只能入住一個man。現在要求所有的man都入住house,求最小費用。最小費用最大流 用到了spfa求費用最小的可改進路徑仿寫 http://blog.csdn.net/lyy289065406/article/details/6732762

poj 2516 Minimum Cost–最小費用最大流

/*有N個連鎖店,M供貨商,供應K中物品,然後還有 某供貨商 向 某連鎖店 供應 某種物品 的費用輸入格式是:N M KN行,每行K個,表示 某連鎖店 對於 某物品 的需求M行,每行K個,表示 某供貨商 關於 某物品 的儲量K個矩陣,每個矩陣N行,M列,表示 某物品 由 某供貨商 向 某連鎖店

總頁數: 61357 1 .... 21008 21009 21010 21011 21012 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.