栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3541 The Last Puzzle

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3541 The Last Puzzle

#include <cstdio>#include <cstring>#include <vector>using namespace std;#define INF 100000000int n,cs;int t[222],d[222];int dp[222][222][2];int ck[222][222][2];int d1[222][222][2];int d2[222][222][2];int d3[222][222][2];int go(int s, int e, int p) {if(s == e) return 0;int &ret = dp[s][e][p];int &p1 = d1[s][e][p];int &p2 = d2[s][e][p];int &p3 = d3[s][e][p];if(ck[s][e][p] == cs) return ret;ck[s][e][p] = cs, ret = INF;int tmp,add;if(!p) {tmp = go(s+1,e,0), add = d[s+1] - d[s];if(t[s] > tmp + add && ret > tmp + add) {ret = tmp + add;p1 = s+1, p2 = e, p3 = 0;}tmp = go(s+1,e,1), add = d[e] - d[s];if(t[s] > tmp + add && ret > tmp + add) {ret = tmp + add;p1 = s+1, p2 = e, p3 = 1;}}else {tmp = go(s,e-1,1), add = d[e] - d[e-1];if(t[e] > tmp + add && ret > tmp + add) {ret = tmp + add;p1 = s, p2 = e-1, p3 = 1;}tmp = go(s,e-1,0), add = d[e] - d[s];if(t[e] > tmp + add && ret > tmp + add) {ret = tmp + add;p1 = s, p2 = e-1, p3 = 0;}} return ret;}void build(int s, int e, int p, int cnt) {if(!p) printf("%d",s+1);else printf("%d",e+1);if(cnt != n) printf(" ");int ns = d1[s][e][p];int ne = d2[s][e][p];int np = d3[s][e][p];if(ns != -1) build(ns,ne,np,cnt+1);}int main() {while(scanf("%d",&n) != -1) {memset(d1,-1,sizeof(d1));memset(d2,-1,sizeof(d2));memset(d3,-1,sizeof(d3));cs++;for(int i=0;i<n;++i) scanf("%d",t+i);for(int i=0;i<n;++i) scanf("%d",d+i);if(go(0,n-1,0) != INF) {build(0,n-1,0,1), puts("");}else if(go(0,n-1,1) != INF) {build(0,n-1,1,1), puts("");}else printf("Mission Impossiblen");}}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号