題解:第一題:
這道題最先想到的就是貪心,但是純貪心明顯是不對的,
如 2 2 1 3 3 貪心結果為2 2 (133)但實際是2 (21) 3 3 。
所以這樣是不對的。
那要怎麼做呢.....考慮用dp.........
階段應該是明顯的就是第幾個數,我們還是要用到貪心的思想,
就是保證在最後面的合起來的數盡可能的小
我們用f[i]表示到第i這個數的最多的組數。
b[i]表示從1到i的所有數的和(很明顯如果合併從k到i那麼合併後的數就是b[i]-b[k]);
s[i]表示到第i這個階段的最後乙個數的大小。
所以轉移方程就是:f[i]=max(f[k]+1); (b[i]-b[k]>=s[k])
s[i]=b[i]-b[k];
#includeusingview codenamespace
std;
const
int inf =1e8;
const
int m = 5005
;int
dp[m], tot;
long
long
res[m], h[m], sum[m];
intmain()
}printf(
"%d\n
",n -dp[n]);
}
第二題:
動態規劃,定義f[i][j]代表在i時間,能力值為j的最多工作次數。
對應最後三種選擇:
①不作為 f[i][j]=f[i-1][j],
②上課 f[i][j]=f[上課前乙個時刻][任意],
③做工作 f[i][j]=f[i-po[j]][j]+1 (po[j]為能力值<=j的工作一次的最短用時)。
對於②可以在預處理出ke[i][j]在i時刻結束,能力值達到j的課程的最晚開始時間。dp過程中處理出g[i]=max。
g[t]即為答案。
#includeusingview codenamespace
std;
const
int inf =1e8;
const
int m = 10005
;int cl[m], clt[m], mt[m], dp[m][205
];struct nodep[m];
/*bool cmp1(node a, node b)
*/bool
cmp2(node a, node b)
intmain());
a =max(a, a);
}/*for(int a = 1; a <= a; a++)
if(cls[a].size() > 1)sort(cls[a].begin(), cls[a].end(), cmp1);
*/for(int i = 1; i <= n; i++)
sort(p + 1, p + 1 +n, cmp2);
memset(mt,
127, sizeof
(mt));
for(int i = 1; i <= n; i++)
mt[p[i].c] =min(mt[p[i].c], p[i].d);
}for(int j = p[n].c + 1; j <= a; j++)mt[j] =mt[p[n].c];
memset(dp, -1, sizeof
(dp));
dp[0][1] = 0
;
for(int t = 0; t <= t; t++)
}for(int p = 1; p <= a; p++)
ans =max(ans, dp[t][p]);
printf(
"%d\n
", ans);
}
第三題二分答案。
列舉距離特殊點最近的建造的樹洞是哪乙個,記為x。
在圖中刪除能夠在二分的時間內到達該樹洞x的所有點。
此時圖變為若干條獨立的鏈,直接求最少需要的樹洞數。
在所有列舉的情況中取最小值,與k比較確定二分範圍變化。
#includeusingview codenamespace
std;
const
int m = 2005
;#define ex(i, u) for(int i = h[u]; i; i = g[i].nxt)
inth[m], dep[m], dis[m][m], n, tot, m, k, root, du[m];
bool
vis[m];
struct edgeg[ m << 2
];void add(int u, int v)
void bfs(int
st) }
}}int
tl;void dfs(intu)}
int work(int now, int
len)
return
ans;
}bool check(int
mid)
intmain()
for(int i = 1; i <= n; i++)
if(du[i] > 2
)
if(!root)
for(int i = 1; i <= n; i++)bfs(i);
int lf = 1, rg =n;
while(lf <=rg)
printf(
"%d\n
", ans);
}
暑假第二十六測
今天又考的奇差 題解 第一題 這麼簡單一道題我想了好久,智商實在是下線了 includeusing namespace std intmain view code 第二題 我們發現e的長度很小,我們可以在上面做文章,其實每個位置對應的 strlen e 都是一樣的 我們用樹狀陣列維護rt pos l...
2017 8 23暑假集訓第二十四天
今天一共a了兩道題 1001.1002 比較簡單的?1001做了一上午 一直在繞一點 當輸入字元m後,要輸入五個數字 用scanf輸入的 但是!卻只寫了四個 d!然後就一直在找bug!找了一上午。我很疑惑,為什麼編譯能過!提交還是莫名其妙的wa!一直在懷疑自己!下午 睡過頭了 來的晚了 1007看了...
第二十章 Skeletal Animation
skeletal animation 骨骼動畫 是指互相連線的變換 骨頭 組成的分層集合,以及對應的模型mesh 即骨骼的 當這些變換隨著時間變化而變化時,模型的mesh就會形成動畫效果。本章,我們將會 skeketal animation,並開發一些系統用於支援模型動畫。把乙個skeleton對映...