hihoCoder #1270 : 建造基地 【dp】
2016-03-12 19:01
363 查看
题目链接:hihoCoder #1270 : 建造基地
思路:每级的成本都是独立的。考虑第i级的成本,dp[j]表示到达j时的最小成本。那么直接暴力转移就好了。
AC代码:
思路:每级的成本都是独立的。考虑第i级的成本,dp[j]表示到达j时的最小成本。那么直接暴力转移就好了。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <map> #include <stack> #define PI acos(-1.0) #define CLR(a, b) memset(a, (b), sizeof(a)) #define fi first #define se second #define ll o<<1 #define rr o<<1|1 using namespace std; typedef long long LL; typedef pair<int, int> pii; const int MAXN = 1e4+10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; void getmax(int &a, int b) {a = max(a, b); } void getmin(int &a, int b) {a = min(a, b); } void add(LL &x, LL y) { x += y; x %= MOD; } pii a[110]; LL dp[MAXN]; int main() { int Q; while(scanf("%d", &Q) != EOF) { while(Q--) { int N, M, K, T; scanf("%d%d%d%d", &N, &M, &K, &T); for(int i = 1; i <= M; i++) scanf("%d", &a[i].fi); for(int i = 1; i <= M; i++) scanf("%d", &a[i].se); bool flag = true; LL ans = 0; for(int i = 1; i <= N; i++) { if(i > 1) { for(int j = 1; j <= M; j++) a[j].se /= T; } CLR(dp, -1); dp[0] = 0; for(int j = 1; j <= M; j++) { for(int k = 0; k <= K; k++) { if(dp[k] != -1) { int next = min(K, k + a[j].se); if(dp[next] == -1 || dp[next] > dp[k] + a[j].fi) dp[next] = dp[k] + a[j].fi; } } } if(dp[K] == -1) { flag = false; break; } ans += dp[K]; } if(!flag) { printf("No Answer\n"); } else printf("%lld\n", ans); } } return 0; }
相关文章推荐
- hihoCoder #1269 : 优化延迟 【二分 + 优先队列】
- hihoCoder #1268 : 九宫 【DFS】
- 第三周项目4:穷举法解决组合问题---换分币
- 工厂设计模式--确定对话框
- nodejs--Nodejs单元测试小结
- 学习进度表01
- myeclipse常用快捷键总结
- linux下安装mysql5.6
- hdoj 1896 Stones 【优先队列】
- 网络与安全方面的最佳开源软件
- hdoj 1716 排列2 【STL】
- java设计模式——结构型之组合模式
- MySQL集群
- 67.迷宫问题(广搜)
- javascript--给你的JS代码添加单元测试
- 小学四则运算题目自动生成
- 构建之法阅读笔记01
- 67.迷宫问题(广搜)
- 67.迷宫问题(广搜)
- linux centos 常用命令