HDU 4526 威威猫系列故事——拼车记(DP)
2013-12-25 10:37
239 查看
题目链接:Click here~~
题意:
中文题。
解题思路:
题目不难,但还是错了 1 次,想了好久。。。
令 dp[i][j] 表示前 i 辆车还剩 j 个人的最少花费。
想到一个贪心的策略是,如果选择坐这辆车,那么肯定坐的人越多越好,因为在后面坐会增加这个人等待时间的花费。
但有一个地方需要特判,就是 j = 0 时的状态不一定从 j = z 转移,而是从所有 j = {1,2,…,z} 的地方转移。
题意:
中文题。
解题思路:
题目不难,但还是错了 1 次,想了好久。。。
令 dp[i][j] 表示前 i 辆车还剩 j 个人的最少花费。
想到一个贪心的策略是,如果选择坐这辆车,那么肯定坐的人越多越好,因为在后面坐会增加这个人等待时间的花费。
但有一个地方需要特判,就是 j = 0 时的状态不一定从 j = z 转移,而是从所有 j = {1,2,…,z} 的地方转移。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 105; int dp ; int main() { int T,n,k,d,s; scanf("%d",&T); while(T--) { scanf("%d%d%d%d",&n,&k,&d,&s); memset(dp,63,sizeof(dp)); const int inf = dp[0][0]; dp[0] = 0; for(int i=1;i<=k;i++) { int t,z; scanf("%d%d",&t,&z); dp[i][0] = dp[i-1][0]; for(int j=1;j<=z;j++) dp[i][0] = min(dp[i][0],dp[i - 1][j] + d + t * j); for(int j=1;j<=n;j++) if(j + z <= n) dp[i][j] = min(dp[i - 1][j],dp[i - 1][j + z] + d + t * z); else dp[i][j] = dp[i-1][j]; } if(dp[k][0] == inf) puts("impossible"); else printf("%d\n",dp[k][0]); } return 0; }
相关文章推荐
- HDU 4526 威威猫系列故事——拼车记(DP)
- hdu 4526 威威猫系列故事——拼车记(DP)
- HDU 4526 威威猫系列故事——拼车记 dp
- HDU - 4526 威威猫系列故事――拼车记 (DP)
- hdu-4526-威威猫系列故事——拼车记-DP
- HDU 4526.威威猫系列故事——拼车记
- HDU 4526——威威猫系列故事——拼车记
- [HDU] 4526 威威猫系列故事——拼车记
- HDU-4526 威威猫系列故事——拼车记 动态规划
- hdu 4526 威威猫系列故事——拼车记
- HDU 4526 威威猫系列故事——拼车记(01背包)
- Hdu 4526 威威猫系列故事——拼车记
- HDU 4540 威威猫系列故事——打地鼠 (状态压缩DP)
- HDU4526威威猫系列故事——拼车记(DP)
- HDU 4504 威威猫系列故事――篮球梦 母函数&DP
- hdu 4504 威威猫系列故事——篮球梦 dp
- HDU 4540 威威猫系列故事——打地鼠(简单DP)
- HDU--杭电--4504--威威猫系列故事——篮球梦--DP
- HDU 4540 威威猫系列故事——打地鼠(DP)
- HDU 4504 威威猫系列故事——篮球梦(dp)