大哈爱闯关WA0pts思路正确无奖求救!!!

8. 大哈爱闯关

题目ID:6020必做题100分

最新提交:

Wrong Answer

0 分

历史最高:

Time Limit Exceeded

30 分

时间限制: 1000ms

空间限制: 524288kB

题目描述

题目描述

大哈最近报名了一个真人闯关节目,总共有 nn 关,如果他能通过 nn 关并且耗时最少那么他就能获得价值连城的作业大礼包。

节目里的每一关都会消耗大哈aiai​的体力和bibi​的时间,理论上来说他要获奖非常地难,但是作为节目的特邀嘉宾,节目组给他了一些特权。

  1. 他有 mm 次"跳过"的权利,当他发起"跳过"时,他可以直接通过当前关卡,不需要消耗他的体力和时间。
  2. 当他成功闯入第 KK 关时,他将多获得一次"跳过"的权利。(当然,他可以选择,在第 KK 关就使用)

大哈一开始的体力为 tt ,问大哈通关需要的最短时间。如果最终大哈还是无法通关,输出 -1

输入格式

第一行,一个整数 nn

第二行,三个整数 t,m,Kt,m,K

第三行,n个整数 aiai​

第四行,n个整数 bibi​

输出格式

一个整数,表示大哈通关需要的最短时间,如果无法通过输出-1.

样例输入1

10
40 2 1
5 3 2 8 22 9 1 1 12 2
3 5 7 9 2 9 4 6 8 3

样例输出1

30

样例输出2

10
40 2 1
5 3 2 8 27 9 1 1 12 2
3 5 7 9 2 9 4 6 8 3

样例输出2

36

数据范围

对于30%的数据,有 n≤20,m=1n≤20,m=1

对于100%的数据

1≤K≤n≤200,1≤K≤n≤200,

1≤t≤2000,1≤t≤2000,

1≤m≤20,1≤m≤20,

1≤ai,bi≤10001≤ai​,bi​≤1000
代码:

#include <bits/stdc++.h>
using namespace std;
int n;
int t,m,k;
int a[205];
int b[205];
int dp[205][2005][25];

int main(){
	cin>>n;
	cin>>t>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	memset(dp,0x3f3f3f3f,sizeof(dp));
	for(int i=0;i<=t;i++){
		dp[0][i][0]=0;
	}
	for(int i=1;i<=n;i++){
		if(i==k){
			m++;
		}
		for(int j=0;j<=t;j++){
			for(int kk=0;kk<=m;kk++){
				if(j<a[i]){
					if(kk==0){
						continue;
					}
					dp[i][j][kk]=min(dp[i][j][kk],dp[i-1][j][kk-1]);
				}
				else{
					if(kk==0){
						dp[i][j][kk]=min(dp[i][j][kk],dp[i-1][j-a[i]][kk]+b[i]);
					}
					else{
						dp[i][j][kk]=min(dp[i-1][j][kk-1],dp[i-1][j-a[i]][kk]+b[i]);
					}
				}
			}
		}
	}
	cout<<dp[n][t][m+1];
	return 0;
}

大家看一看我的题吧QAQ
不知道哪里错了QAQ

不可以回复老帖