Kattis Problem - Radio Commercials
题目类型:动态规划
题意
给定 n 个连续的时间段期间收看广告的人的数量,和发布一个广告所需要的费用 p,假设每有一个人收看广告则会有一元的收益。现在需要找一个连续的播放广告的时间段子序列使收益总和最大。
分析
设 dp[i] 是以第 i 段结尾的收益的最大和
状态转移
如果 dp[i - 1] < 0 则说明 dp[i-1] 对 dp[i] 做负贡献,即 dp[i-1] + a[i] < a[i]。所以
当 dp[i-1] > 0 时:dp[i] = dp[i-1] + a[i]
当 dp[i-1] < 0 时: dp[i] = a[i]
因为状态转移只用到 dp[i-1] 所以可以使用一个变量进行维护。具体细节参考代码。
代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class Main {
static final int MAX_N = 100010;
static final int INF = 0x3f3f3f3f;
static final int mod =