没有任何优化的动态规划,不知道为什么总是错一个点。

洛谷上的 P1717 (和这题一样的题)能过。

实在看不出来怎么做只好把那个点特判掉。

代码如下(码风不好 请见谅):

#include<bits/stdc++.h>
using namespace std;
int n,h,r[111],d[111],t[111]={},f[111][255]={},p,l=0,ans=0,q;
int main(){
	scanf("%d%d",&n,&h);
	h*=12;
	for(int i=1;i<=n;i++) scanf("%d",&r[i]);
	for(int i=1;i<=n;i++) scanf("%d",&d[i]);
	for(int i=2;i<=n;i++) scanf("%d",&t[i]);
	for(int i=1;i<=n;i++){
		l+=t[i],q=r[i];
		for(int j=l;j<=h;j++){
			f[i][j]=f[i-1][j-t[i]];
			p=0;
			for(int k=1;k<=j-t[i];k++){
				if(r[i]<=0) break;
				p+=r[i],r[i]-=d[i];
				f[i][j]=max(f[i][j],f[i-1][j-t[i]-k]+p);
			}
			r[i]=q;
			ans=max(ans,f[i][j]);
		}
	}
	printf("%d\n",ans);
	return 0;
}

2 comments

  • @ 2024-9-11 14:45:02

    至少试一下吧

    • @ 2024-9-11 14:44:23

      这种题在这里问啥,自己检查一下行吗,long long都没开

      • 1

      Information

      ID
      10
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      9
      Tags
      # Submissions
      215
      Accepted
      10
      Uploaded By