ZOJ-2501
来源:互联网 发布:linux l2tp 编辑:程序博客网 时间:2024/06/06 09:20
生涯第一道DP,献给此题!当然找了道最简单的。。大意就是三个火车头,每个车能拉相同数量的车厢,问怎么分配能使乘客量最大,就是取三个等长区间使总和最大,分别DP一个区间,二个区间,三个区间的最优解就行。第一次写DP,感觉代码好丑。。话说被本题测试数据坑了,从网上下过来之后发现output和答案不一样,找了半天也没发现错在哪,结果一提交竟然AC了。。真是无语
#include<stdio.h>int max(int a, int b){return a > b ? a : b;}int main(){int t, n, m, i, a[5500], dp[3][5500];scanf("%d", &t);while (t--){scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d", &a[i]);scanf("%d", &m);int sum = 0, temp;for (i = 0; i < m; i++)sum += a[i];dp[0][i - 1] = sum;temp = sum;for (; i < 2 * m; i++){temp = temp + a[i] - a[i - m];dp[0][i] = max(dp[0][i - 1], temp);sum += a[i];}dp[1][i - 1] = sum;for (; i < 3 * m; i++){temp = temp + a[i] - a[i - m];dp[0][i] = max(dp[0][i - 1], temp);dp[1][i] = max(dp[1][i - 1], temp + dp[0][i - m]);sum += a[i];}dp[2][i - 1] = sum;for (; i < n; i++){temp = temp + a[i] - a[i - m];dp[0][i] = max(dp[0][i - 1], temp);dp[1][i] = max(dp[1][i - 1], temp + dp[0][i - m]);dp[2][i] = max(dp[2][i - 1], temp + dp[1][i - m]);}printf("%d\n", dp[2][n - 1]);}return 0;}
0 0
- ZOJ-2501
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ArcEngine加载SDE中的栅格数据的问题
- nutch-1.7-学习笔记(2)-org.apache.nutch.crawl.Generator.java-关于Hadoop的partition
- WebService之CXF注解之三(Service接口实现类)
- Android的intent之间复杂参数的传递
- java实现归并算法
- ZOJ-2501
- 【Android开发】关于错误 java.lang.NullPointerException
- ArrayList implement
- boost::mpl::eval_if的用法
- linux中用tailf实时观看tomcat日志
- 引用,引用形参,指针形参与指向指针的引用形参,内存泄露及free相关
- LinkedList implement
- WebService之CXF注解之四(测试类)
- Android Handler Message多线程实例