3、情書的代價
(cost.pas/c/c++)
【題目描述】
在如今的應試教育下,「以學業為重」成為了分手的主要理由。佳佳想知道寫情書到底會花去多少時間以決定是否值得犧牲這些時間來討好girlfriend。他得到了乙份evalls的所有情書的副本,他希望從中得知evalls寫這些情書最少花了多少時間。
完成每封情書需要花費不同的時間。寫完第i封情書需要ti個單位的時間。從情書的內容上看,某些情書有前後呼應的關係,這決定了一些情書的寫作時間有先後關係。因此,佳佳可以得到若干個這樣的資訊:哪封情書一定是在哪封情書寫完之後才寫的。我們假設evalls每天最多花t個單位時間來寫情書。如果時間足夠,一天裡可以寫多封情書;但一封情書必須在一天裡完成,不能分成若干天來寫。佳佳想知道,evalls最少花了多少天來完成所有的情書。
【輸入格式】
輸入檔名為cost.in
第一行輸入兩個用空格隔開的正整數n和t,表示情書的總數和每天最多花費的時間。
第二行有n個用空格隔開的正整數,其中,第i個數表示寫第i封情書需要花費的時間ti。
以後若干行每行有兩個用空格隔開的正整數x和y,表示第x封情書要在第y封情書之前完成。
輸入資料總保證所有情書可以在有限的時間內完成,因此你不需要考慮無解的情況。
【輸出格式】
輸出檔名為cost.out
輸出乙個正整數,表示完成所有的情書最少需要幾天。
【樣例輸入】
3 5
2 3 4
1 3
3 2
【樣例輸出】
3 【資料規模】
對於所有資料,n ≤ 30,t ≤ 300 000。
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define maxn 500005
#define ll unsigned long long
ll n,ans,rest,num_e,t;
struct edgee[maxn];
ll dis[maxn],cost[maxn],head[maxn],rd[maxn];
bool v[maxn];
void add(ll x,ll y)
void read(ll x)
}queue
q;int main()
while(!q.empty())}}
printf("%llu",ans);
return
0;}
這是80分**。。。。。改不過來啦啊啊啊啊啊
#include
using
namespace
std;
int n, limit, x, y;
int t[35], ans;
int mem[35][35];
int f[35][35], size[35], topo[35], in[35];
int w[35][35], size[35];
int q[35], front, rear;
void maketopo()
}topo[0] = 0;
for(int i = 1; i <= n; i++) topo[q[i]] = i;
return;
}bool vis[35];
void dfs(int day, int use, int pre)
if(finish == 0)
int tot = 0;
for(int i =finish; i <= n; i++) if(! vis[i]) tot += t[i];
if(day + tot / limit >= ans) return;
bool canfinish = false;
for(int i = finish; i <= n; i++) if(! vis[i])
if(ok && use + t[i] <= limit && topo[i] > topo[pre])
}for(int i = finish; i <= n; i++) if(! vis[i])
if(! ok) continue;
vis[i] = true;
if(use + t[i] <= limit && topo[i] > topo[pre]) dfs(day, use + t[i], i);
else
if(! canfinish) dfs(day + 1, t[i], 0);
vis[i] = false;
}return;
}int main()
maketopo();
ans = n;
dfs(1, 0, 0);
printf("%d\n", ans);
return
0;}
我搞到了標程 GDOI 2016 Day2 第三題 機密網路
第2問其實沒有什麼特殊的地方,所以這裡只講第1問的做法,然後第2問的思路也是一樣的。對於這種環套樹的問題,可以考慮先刪去環上的一條邊,這樣它就變成了一棵樹,然後統計樹上的答案,最後加上必須通過刪去的邊的答案。樹上的做法 這類問題很容易聯想到點剖。對於當前乙個根為x的子樹,用s i 表示深度為i的節點...
fcc解法 day2 今天做的兩道題
依舊是fcc上的題目,今天第一道題 sum all odd fibonacci numbers 給乙個正整數num,返回小於或等於num的斐波納契奇數之和。斐波納契數列中的前幾個數字是 1 1 2 3 5 和 8,隨後的每乙個數字都是前兩個數字之和。例如,sumfibs 4 應該返回 5,因為斐波納...
noip膜你賽day2第二題 小G的煩惱
題意 有n座城市,m條雙向的航線連線它們,每一條航線有兩個值,分別是p,q,假設你付出x,y的花費那麼對於所有滿足p x q y的航線,都可以免費乘坐 其實題目本身來說是有乙個小彎的,就是說如果你付出的x,y並不能讓你乘坐那條航線,你也可以額外付這一條航線錢,但顯然,這是不優的 求最小花費 有自環和...