hdu 4864 Task 貪心,hdu4864task貪心

來源:互聯網
上載者:User

hdu 4864 Task 貪心,hdu4864task貪心

題意:有n個機器,m個任務。每個機器至多能完成一個任務。對於每個機器,有一個最大已耗用時間xi和等級yi,對於每個任務,也有一個已耗用時間xj和等級yj。只有當xi>=xj且yi>=yj的時候,機器i才能完成任務j,並獲得500*xj+2*yj金錢。問最多能完成幾個任務,當出現多種情況時,輸出獲得金錢最多的情況。

題解:

將任務已x從大到小排序(x相同時已y從大到小排序)。然後也用相同排序方法排序機器。開始遍曆任務,找出所有xi(xi>=xj),從中選擇yi最小的一個作為這個任務的運行機器。為什麼這麼貪心,因為若還存在任務(xk,yk)使得這個機器能被使用,但xj>=xk,所以獲得金錢更多,優先選擇j;若k不能使用這個機器,那麼必定也就不存在其他機器能被使用,除非是新加入的機器,但新加入的必定不能完成任務j,所以完成任務保證了最多。



代碼:

#include <iostream>#include <cstdio>#include <cstring>#include <ctime>#include <algorithm>#include <cmath>#include <queue>#include <vector>using namespace std;#define LL __int64const int maxn=1e5+10;struct node{    int x,y;}e[maxn],f[maxn];int c[101];int cmp(node a,node b){    if(a.x==b.x)return a.y>b.y;    return a.x>b.x;}int main(){    //freopen("C:\\Documents and Settings\\Administrator\\×ÀÃæ\\in.txt","r",stdin);    //freopen("C:\\Documents and Settings\\Administrator\\×ÀÃæ\\out.txt","w",stdout);    //double a = clock();    int n,m;    while(scanf("%d%d",&n,&m)!=EOF)    {        int i,j,k,num=0;        LL ans=0;        for(i=0;i<n;i++)            scanf("%d%d",&e[i].x,&e[i].y);        for(i=0;i<m;i++)            scanf("%d%d",&f[i].x,&f[i].y);        sort(e,e+n,cmp);        sort(f,f+m,cmp);        memset(c,0,sizeof(c));        for(i=0,j=0;i<m;i++)        {            while(j<n&&e[j].x>=f[i].x)            {                c[e[j].y]++;                j++;            }            for(k=f[i].y;k<=100;k++)            {                if(c[k])                {                    num++;                    c[k]--;                    ans=ans+500*f[i].x+2*f[i].y;                    break;                }            }        }        printf("%d %I64d\n",num,ans);    }    //double b = clock();    //printf("%lf\n", (b - a) / CLOCKS_PER_SEC);    return 0;}



HDU 1042高人指點

給你個參考答案把,肯定是對的
#include <iostream>
using namespace std;

int main(void)
{
int carry,digit,temp,i,j,n;

while(cin>>n)
{
int a[200000] = {1,1};
digit = 1;
carry = 0;
for(i = 2;i<=n;i++)
{
for( j = 1,carry = 0;j<=digit;j++)
{
temp = a[j]*i + carry;
a[j] = temp%10;
carry = temp/10;
}
while(carry)
{
a[++digit] = carry%10;
carry /= 10;
}

}

for(i = digit;i>0;i--)
{
cout<<a[i];
}
cout<<endl;
}
return 0;
}
 
hdu1166 排兵布陣 pascal 線段樹更改

線段樹
、線段樹定義
資訊學競賽經常遇些與區間操作有關題目比統計若干矩形並集.計算若干區間線段極值及總和等時會用線段樹種特殊資料結構
線段樹棵二叉樹記T(ab).參數a,b表示區間[a,b]其b-a稱區間長度,記L線段樹T(a,b)也遞迴定義:
若L>1:[a,(a+b)div 2]T左兒子;
[(a+b)div 2,b]T右兒子
若L=l:T葉子結點
處理對象線段或區間目把區間[1..n]劃分些[i,i+1]單元地區每單元地區對應線段樹葉子結點每結點用變數來記錄覆蓋該結點線段條數使用線段樹要求知道所描述區間端點能取值換句說,設A[1..n]從小大排列區同端點集合對於任意待描述閉區間P=[xy].存l≤i≤j≤n使得x=a[i]且y=a[j],裡i,j稱x,y編號注意:即使實數座標線段樹也只有整數含義所無特殊說明區間[x,y]x、y均整數.即原始區間頂點座標編號
般情況下線段樹結點類型定義下:
type linetree=^node
node=record
i,j:integer; {結點表示區問頂點標號i.j}
count:integer; {覆蓋結點區間數}
lchild,rchild:linetree; {二叉樹兩子結點}
end;
圖6-22棵典型線段樹描述區間端點有10種取值

二、線段樹基本操作和應用
線段樹有些重要特徵.線段樹棵平衡樹.深度超過log2L;二線段樹把區問上任意條線段都分成超過2log2L條線段所線段樹能O(log2L)時間內完成條線段插入刪除尋找等工作下面結合題目給出線段樹常用操作過程
【例6-14】售票系統
【問題描述】
某次列車途經c城市.城市蝙號依次1c列車上共有s座位.鐵路局規定售出車票只能坐票.即車上所有旅客都有座售票系統由電腦執行.每售票申請包含三參數.分別用O、DN表示o起始站D目地站.N車票張數售票系統對該售票申請作出受理或受理決定.只有從OD區段內列車上都有N點N上空座位時該售票申請才被受理請寫程式實現自動售票樂統
輸入:
輸入檔案:RAILWAY.IN,第行包含三用空格隔開整數c、s和R.其l≤c≤600001≤s≤600001≤R≤60000c城市數s列車上座位元R所有售票申請總數接下來R行每行售票申請.用三由空格隔開整數OD和N表示O起始站.D目地站.N車票站數其l≤D≤cl≤O≤c.所有售票申請按申請時間從早晚給出
輸出:
輸出檔案:RAlLWAY.OUT,共有R行,每行輸出YES或NO.表示當前售票申請被受理或被受理
【範例輸入】RAIlWAY.IN
4 6 4
l 4 2
I 3 2
2 4 3
1 2 3
【範例輸出】RAILWAY.OUT
YES
YES
NO
NO
【問題分析】
本題道線統計和尋找題—區間插入和尋找類題目規模比較小情況容易做只需要簡單類比了本題規模60,000.簡單摸擬複雜度O(n2)60,000 x 60,000=3,600,000,000運算量無法承受所我們必須使用特殊資料結構和演算法來降低時間複雜度
區間插入和尋找讓我們容易聯想類資料結構線段(區間)樹線段樹插入和尋找區間時間複雜度都O(log2n)只本題比較特殊要尋找段區間內大值所必須設計擁有尋找區間大值功能線段樹
下面我們來設計樣線段樹
首先.作棵線段樹.樹上每結點記錄區間被覆蓋次數必少此外.本題要尋找區間內大值所還須記錄每區間內大值兩值必須要記錄.而除去兩值外.也看出還需要記錄別資訊了我們妨先令線段樹只記錄兩值看們否維護
維護操作關鍵記錄值對於線段樹維護指插入和尋找過程.對維護複雜度log2n層級內......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.