poj 2844 多重背包

多重背包,二進位轉化為01背包後可解存在性問題  dp【i】【j】=dp【i-1】【j】|dp【i-1】【j-coin【i】】;位元運算#include<iostream>#include<string.h>using namespace std;const int maxn=100005;int bit_mask[30],nn;int coin[maxn],num[101],value[101];bool dp[maxn];void change(int );int

POJ 2769 Reduced ID Numbers (同餘定理)

/*應用同餘定理類比就好,讓m從小到大遞增注意驗證是否滿足條件即可。因為求的是同餘所以bool數組可以比資料範圍小10^(-1)倍。。。否則會逾時。。。*/ Source CodeProblem: 2769 User: imutzcyMemory: 280K Time: 454MSLanguage: C++ Result: AcceptedSource

poj 2609 動態規劃

DP,注意單組輸入,題目的進程無後效性,適合DP,由於當時沒有估計出車子數量,用了滾動數組。現在來談下DP狀態的表示,比較容易想到的是DP【i】【j】【k】(現在的車子編號,隊列1長度,隊列2長度)明顯MLE,其實我們只需要有前兩維即可,因為最後一維可以從前面兩維推知:k=sum【i】-j;問題轉為存在性問題了,dp【i】【j】=dp【i-1】【j】|dp【i-1】【j-len【i】】(分別為放在隊列1,放在隊列2)注意細節處理詳情見代碼:#include<stdio.h>#incl

cf 127 div .1 Fragile Bridges(dp 好題)

這個題目有必要標記下,和hdu的最大矩形面積一樣,分為兩類DP,最後枚舉求解連結:http://www.cppblog.com/hanfei19910905/archive/2012/06/30/180831.aspx題意:有N個點,點與點之間存在通過次數被限定的橋,每通過一次橋,能獲得一分,問你最多能獲得多少分(起點自己決定)解析:從左邊DP一次起,右邊DP一次,dpl【i】【0】從i點出發遍曆0 - i 點不回來,dpl【i】【1】表示從i點出發遍曆0 - i

HDU 1010第一道剪枝的DFS

自己寫果斷逾時了,看了大神的剪枝,果然好強悍,附上剪枝題目大意:這道題就是講有一隻狗要吃骨頭,結果進入了一個迷宮陷阱,迷宮裡每走過一個地板費時一秒,該地板就會在下一秒塌陷,所以你不能在該地板上逗留。迷宮裡面有一個門,只能在特定的某一秒才能開啟,讓狗逃出去。現在題目告訴你迷宮的大小和門開啟的時間,問你狗可不可以逃出去,可以就輸出YES,否則NO。解題思路:這道題,要用到剪枝搜尋來做,否則會逾時。剪掉的條件是,如果可走地板數目小於給定的時間,絕對不可能得救。還有就是狗走到門的時間必須和題目給定的時間

DFS 下沙小面的(2)

搜尋真的理論上能解決所有問題,特別是對於資料量小的題目,繼續練習,為DP做準備#include<stdio.h>#include<stdlib.h>#include<string.h>#define Max 9int adj[35][35];int stop[Max],moved[Max],min,n,k;int cmp(const void *a,const void *b){return *(int *)a-*(int

UVa 10498 Happiness! (線性規劃)

Happiness!Input: standard inputOutput: standard outputTime Limit: 3 secondsProf. Kaykobad has given Nasa the duty of buying some food for the ACM contestents. Nasa decided to buyn different items. He then asked each of them contestents how much of

ZOJ 3203 Light Bulb (三分演算法)

/*人左右走動,求影子L的最長長度。根據圖,很容易發現當燈,人的頭部和牆角成一條直線時(假設此時人站在A點),此時的長度是影子全在地上的最長長度。當人再向右走時,影子開始投影到牆上,當人貼著牆,影子長度即為人的高度。所以當人從A點走到牆,函數是先遞增再遞減,為凸性函數,所以我們可以用三分法來求解。*/ #include<functional>#include<algorithm>#include<iostream>#include<fstream>

記憶化搜尋,poj1088

flag【i】【j】表示以現在這個位置為起點的最遠能走的長度,熟悉下遞迴,這個題應該不難,記憶化#include<stdio.h>#include<string.h>#define Max 105#define Maxhigh 10005typedef struct {int x,y;}position;position move[4]={-1,0,0,1,1,0,0,-1};int flag[Max][Max];int maze[Max][Max];void wall(

HDU 1521 排列組合 (指數型母函數)

/*很裸很裸的指數型母函數。。。(注意:指數形式的母函數由於除以了大數,所以精度序號控制,否則會WA  N多次)Ans= x ^ m的係數  *  (m !)*/  Problem : 1521 ( 排列組合 )     Judge Status : AcceptedRunId : 7628739    Language : C++    Author : CherryChouCode Render Status : Rendered By HDOJ C++ Code Render

個人DP訓練(基礎版)

題目連結    hdu 2955 Robberies01背包,轉化為求被抓的機率。 題目連結       hdu   1864  最大報銷額 01背包,每張發票的總額為容量和價值,注意預先處理資料,對於浮點數,向大牛cxlove學了處理(%d.%d)接收小數 題目連結      hdu  1506 Largest Rectangle in a Histogram      用了動態規劃的思想,用兩個dp數組表示左邊和右邊的最長連續,詳情見題解:點擊這裡 題目連結       hdu

POJ 1014 Dividing(DFS、完全背包、母函數)

/*題意:每一行輸入的6個數,第 i 個數表示價值為 i 的珠寶的個數,問這些珠寶是不是能等價平分給兩個人*//*解法:1、最簡單的方法就是用dfs搜尋就行(占坑)               2、完全背包的基礎題(占坑)               3、母函數。總價值 value=(∑( i  *  num )),如果value為奇數,那麼珠寶不可分。當value為偶數是,就可利用母函數,轉化為考察 ( x  ^ value )  /  2

ZOJ 3471 狀態壓縮DP

比較明顯的DP,由於資料比較小(maxn==10)所以狀態壓縮dp直接搞#include<iostream>#include<algorithm>#include<string.h>using namespace std; const int maxn=1025;int dp[maxn],pow[12][12],bit_mask[15];//0表示存活,1表示死亡int main(){int

hdu 1506 dp思想的應用

我們要求最大矩形面積,那麼我們應該求每個矩形向兩邊延伸的最大長度,最壞情況為0(n),必然TLE,那麼我們可以應該DP的思想,用一個數組來儲存一些結果。例如,dpl【i】表示從左邊過來的最長,那麼我們計算dpl【i】的時候,如果左邊的比自己高,那麼dpl【i】=dpl【i-1】,但是可能在前面還有更多符合情況的(比i-1低但是比i高),所以我們要用i-1-dp【i-1】,繼續尋找,詳情看代碼#include<iostream>#include<string.h>#defi

樹狀數組求區間最大值一類問題

樹狀數組(Binary Index Tree)利用二進位的一些性質巧妙的劃分區間,是一種編程,時間和空間上都十分理想的求區間和的演算法,同樣我們可以利用樹狀數組優美的區間劃分方法來求一個序列的最值約定以 num[]  表示原數組, 以 idx[] 表示索引數組, Lowbit(x)=x&(-x) 樹狀數組求和時通過構造數組 idx[] 使 idx[k]=sum(num[tk]), tk [k-Lowbit(k)+1,k], 使用同樣的方法構造最值索引數組:以最大值為例,

poj 3692 二分圖最小點集覆蓋

        自己感覺這道題還是挺難得,,不容易想。題目讓求最多有多少個兒童,,首先逆向轉化成求不認識的兒童,,然後再建圖轉化成最小點集覆蓋。。。挺難的。題目:KindergartenTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 3409 Accepted: 1599DescriptionIn a kindergarten, there are a lot of kids. All girls of the kids

hdu 1867 最長公用首碼和尾碼

題意描述不太好,說好是A+B,卻可以B+A,雖然理論上是這樣,但我覺得題意說清楚些比較好我的做法和網上的題解不一樣,比如asdf sdfg我把第一個字串接在第二個的後面,形成sdfgasdf,長度一共為8,然後找next【8】,next【8】就是最長公用串的長度(為什麼是這樣,請看題解poj 2752)然後把第二個字串接在第一個的後面,再找下,最後對比下哪個長點,就輸出哪個,有個東西不好處理,aaaaaaaa

Treats for the Cows 記憶化搜尋

#include<stdio.h>#include<string.h>int hash[2005][2005];int treat[2005];int num;int dfs(int head,int tail,int n);int main(){ int i,k; while(scanf("%d",&num)!=EOF) { memset(hash,0,sizeof(hash)); for(i=0;i<num;

hdu 1394 樹狀數組求逆序數

          以前用過線段樹求逆序數,這次想用樹狀數組試一下,悲催的是想了好久才想明白。。。。看來對樹狀數組還是不夠瞭解啊。糾結。。。。題目:Minimum Inversion NumberTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2413    Accepted Submission(s): 1492Problem

關於二分尋找的應用拓展

這是原始版的精確尋找int search(int a[],int low,int high,int key){int mid;while(low<=high){mid=(low+high)/2;if(a[mid]>key)high=mid-1;else if(a[mid]<key)low=mid+1;else return mid;}return -1;}這是尋找大於等於的int search(int a[],int low,int high,int key){int mid;

總頁數: 61357 1 .... 21013 21014 21015 21016 21017 .... 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.