(poj)3254 Corn Fields

和炮兵陣地差不多。。/*【題目大意】類似於上面一道題,一個方格組成的矩陣,每個方格可以放大炮用0表示,  

hdu(1728)逃離迷宮

本題求的是拐彎最少的,可以用優先隊列來求。。只要到達目的地,並且轉的彎數小於所要求的即可。。#include"stdio.h"#include"string.h"#include"queue"char map[110][110];int visit[110][110];using namespace std;int dir[4][2]={1,0,  -1,0,   0,1,  0,-1};int n,m,sx,sy,ex,ey,p;struct point{ int x,y; int step;

poj(1185)炮兵陣地

思路:狀態壓縮DP。很經典的狀態壓縮DP。用int型來表示每行的狀態(如果int型的二進位的第i位為1,則表示這一行的第i列有安裝大炮)。這樣的話由於最多有10列,故由計算可得最多有60種狀態。DP部分:dp[r][i][k]表示第r行的狀態為k,第r-1行的狀態為i時候,前r行最多能夠安裝的大炮數量。 #include<stdio.h>#include<string.h>int dp[105][100][100];//dp[i][j][k]:

hdu(1394)Minimum Inversion Number

感覺此題還是用暴力比較方面,不過用線段樹更快。。 題意:就是給出一串數,當依次在將第一個數變為最後一個數的過程中,要你求它的最小逆序數。思路:可以用樹狀數組和線段數做。這裡我是用線段樹做的。建的是一棵空樹,然後每插入一個點之前,統計大於這個數的有多少個,直到所有的數都插入完成,就結果了逆序樹的統計。//先用線段樹求出初始的時候,逆序數的個數,再利用公式求最小的。。//這個下標必須從零開始,不然會無法運行。  左移序列之後得到新的序列的逆序數的個數就等與當前總的個數減左邊的數的逆序數a[i],然後

hdu(1163)Eddy’s digital Roots

這題有多種方法;第一種:因為ab*ab=(10*a+b)*(10*a+b)=100*a*a+10*2*a*b+b*b=a*a+2*a*b+b*b=(a+b)*(a+b)abc*abc=(100*a+10*b+c)*(100*a+10*b+c)               =10000*a*a+2000*a*b+100*b*b+200*a*c+20*b*c+c*c               =a*a+2*a*b+b*b+2*a*c+2*b*c+c*c               =(a+b)^2

poj(3468)A Simple Problem with Integers

 POJ

hdu4006(優先隊列)

http://acm.hdu.edu.cn/showproblem.php?pid=4006分析:    有很多方法,不過如果想省事兒的話,還是用優先隊列,只存前k大的數就行了。 #include<stdio.h>#include<string.h>#include<queue>using namespace std;struct point {    int num;    friend bool operator<(point a,point b) 

hdu(2817)A sequence of numbers

這個題,只要學了二分冪演算法,就easy了。用二進位的方法,當他是奇數的時候才乘ans上。。 #include<stdio.h>#define m 200907__int64 power(__int64 a,__int64 b){ __int64 ans=1; a=a%m; while(b) { if(b%2) ans=ans*a%m; b=b/2; a=a*a%m; }

hdu(1152)

題目意思是:以最中間的那個點為準點,建立座標系,二四象限得點為stan的得分,一三象限為另外一個人的得分。分別輸出他們的得分。。不計在座標軸上的點。。#include"stdio.h"#include"string.h"int a[100000],b[100000];int main(){ int m,n,i,k; while(scanf("%d",&m),m) {  for(i=0;i<m;i++)   scanf("%d%d",&a[i],&b[i]);  k=

poj(1321)回朔搜尋

這個題目把棋子的座標依次存進數組裡,然後再分別用兩個數組記錄行和列有哪些已經被佔用了,之後便從第一個棋子開始深搜即可,深搜函數帶兩個參數p,count,p表示從當前第p個棋子開始往下搜,count表示已經放了count個棋子。把滿足條件的位置一次儲存起來。再利用回朔搜尋,很好;;#include"stdio.h"#include"string.h"char map[100];int qx[100],qy[100];int visx[100],visy[100];int

hdu(1253)勝利大逃亡(隊列+搜尋)

本來用優先隊列,沒想到逾時厲害。。最後改成隊列,立刻過了,竟然比優先隊列快樂進千毫秒。。#include"stdio.h"#include"string.h"#include"queue"using namespace std;int a,b,c,T;struct point { int x,y,z; int step;};int dir[6][3]={0,0,1,   0,0,-1,  1,0,0,  -1,0,0,   0,1,0,   0,-1,0};int visit[52][52][5

hdu(1113)Word Amalgamation

思路:先用一個函數把字典儲存起來:然後把這個詞典按升序排列好,最後就不用排列了。。然後在尋找的時候,把單詞按升序排列好之後,就好判斷了。。#include"stdio.h"#include"string.h"#include"stdlib.h"char map[101][101];char  dp[101][101];int k;int cmp(const void *a,const void *b){    return strcmp((char *)a,(char *)b);}int

hdu(2717)Catch That Cow

運用優先隊列把所有情況都入隊,然後取出步數最少的。。#include"stdio.h"#include"string.h"int visit[110000];#include"queue"using namespace std;int n,m;struct point { int x,step; friend bool operator<(point a,point b) {  return a.step>b.step; }};int

hdu(1556)Color the ball

第一次用直接更新到節點的方法,結果果斷逾時。。唉。。只有用更新區間的方法了;只要圖的顏色在這個區間就可以加一,這樣使得增加的值都存在了區間最大的節點上,為了使其下達給下面各個節點,就用到了sum函數。不過這樣感覺還是慢啊,一千多毫秒。。#include"stdio.h"#include"string.h"struct point{ int x,y,sum,s;}a[400000];void tree(int t,int x,int y){ a[t].x=x; a[t].y=y; if(x==y)

hdu3074(Multiply game)

純模板,就是把單點更新,區間求和改為單點更新,區間求積。題意:給出n個數,有m個操作,操作有:詢問區間[L,R]中所有數的成績、改變某一個數的值。思路:線段樹模版題。在每個結點設一個值儲存乘積。  #include<stdio.h>#include<string.h>#include<stdlib.h>#define N 60000#define M 1000000007struct point { int x,y; __int64

hdu(4539)排兵布陣

和炮兵陣地差不多,要注意幾個條件即可。。 題意:n行m列的矩陣,1表示可以放東西,0表示不可以。曼哈頓距離為2的兩個位置最多隻能有一個位置放東西。問最多放多少個東西。 對於某一行的狀態可以由前面的兩行推出。即:dp[ i ][ j ][ k ]  =  max( dp[ i ][ j ][ k ] , dp[ i-1 ][ k ] [ k2 ] + ones[ j ] );其中i-1表示前1行,k2是前2行的狀態。 #include"stdio.h"#include"string.h"int

hdu(2167)Pebbles

#include"stdio.h"#include"string.h"int dp[3][1<<16];int max(int a,int b){ a=a>b?a:b; return a;}int main(){ int len,m,i,j,k,q,sum,ss,p; char a[1000]; int b[100][100],s[1000]; while(gets(a)) {  len=strlen(a);  if(len==0)   break;  m=0;  for(i=

hdu(3335)Divisibility

題目大意:給出N(1000)個數字(<2^63

hdu(2553)(回朔搜尋)

//此題是經典的N皇后問題,描述:在一個N*N的棋盤上要擺放N個皇后,要求任意兩個//皇后不能在同一行,同一列或者同一條與棋盤的邊成45度角的斜線上,即與對角線//平行的斜線上,求對於不同的N,各有多少種擺法使任意兩個皇后不能相互攻擊。//用回溯法就可以解決,設皇后的編號依次為1,2,……,n,則可以認為第i個皇后//必須擺放在第i行,然後枚舉第一個皇后的位置進行回溯,若某一次發現某個皇后//無法找到擺放位置則直接返回,如果所有皇后都可以找到擺放位置,則說明存在//一種擺法滿足要求,統計有多少種

printf函數詳解

printf()函數是格式輸出函數,請求printf()列印變數的指令取決與變數的類型.例如,在列印整數是使用%d符號,在列印字元是用%c 符號.這些符號被稱為轉換說明.因為它們指定了如何不資料轉換成可顯示的形式.下列列出的是ANSI C標準printf()提供的各種轉換說明.           轉換說明及作為結果的列印輸出%a               

總頁數: 61357 1 .... 14323 14324 14325 14326 14327 .... 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.