545C Woodcutters Problem - 545C - Codeforces
给 n 棵树在一维数轴上的坐标 xi,以及它们的长度 hi。现在要你砍倒这些树,树可以向左倒也可以向右倒,砍倒的树不能重合、当然也不能覆盖其他的树原来的位置,现在求最大可以砍倒的树的数目。
思路
简单dp
分三种情况,第i棵树不砍,向左倒,向右倒。
转移方程
dp[i][0]=max(dp[i-1][0],max(dp[i-1][1],dp[i-1][2]));
if(i==1||x[i-1]+h[i-1]<x[i]-h[i]){
dp[i][1]=max(dp[i][1],dp[i-1][0]+1);
dp[i][1]=max(dp[i][1],dp[i-1][1]+1);
dp[i][1]=max(dp[i][1],dp[i-1][2]+1);
}else if(x[i-1]<x[i]-h[i]){
dp[i][1]=max(dp[i][1],dp[i-1][0]+1);
dp[i][1]=max(dp[i][1],dp[i-1][1]+1);
}
if(i==n||x[i+1]>x[i]+h[i]){
dp[i][2]=max(dp[i][2],dp[i-1][0]+1);dp[i][2]=max(dp[i][2],dp[i-1][1]+1);
dp[i][2]=max(dp[i][2],dp[i-1][2]+1);
}
1348B. Phoenix and Beauty Problem - 1348B - Codeforces
给出一个长度为n的序列a(1≤ai≤n),在其中任意位置插入若干个[1,n]中的数,使得新序列b中的连续k项和都相等。
你可以输出任意一组长度在[n,10^4]之间的解。
思路
题目中有提示
he is not trying to minimize the number of inserted integers.
If there are multiple solutions, print any. It's guaranteed that if we can make array a beautiful, we can always make it with resulting length no more than 10^4.
也就是说只要有答案就有暴力解,考虑如何暴力。
要求任意连续k项和相等,那么最暴力的解法就是数列按k项为周期循环。
在暴力一点就是为每项构造一个k项周期,即数组构造为n*(x[1]~x[k])