我也想知道WA了一片的原因,蒟蒻表示DP入门ing太菜了
查看原帖
我也想知道WA了一片的原因,蒟蒻表示DP入门ing太菜了
321124
理想国の糕楼主2021/3/30 09:09
//DP红牌问题
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
using namespace std;
int n,m;
long long a[2001][2001];//第i组,第j步 
long long dp[2001]={0};//记录第i步走得最近的结果 
long long ans=9000000000;
int main(){
	//输入部分 
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&a[i][j]);
		}
	} 
	//dp[0]=1000000;
	//处理、输出部分
	int t; 
	for(int i=1;i<=m;i++){//不同的组开始 
		t=i;
		for(int day=1;day<=n;day++){
			//这里需要保证组别不会变回去 
			int next=(t+1)%m;
			if((t+1)%m==0)next=m;
			if(day-1>=0){
				if(dp[day-1]+a[t][day]>dp[day-1]+a[next][day]){//选择今天加 
					t=next;
					dp[day]=dp[day-1]+a[next][day];
					//printf("第%d天花费最少为%d\n",day,a[next][day]);
				}else{
					dp[day]=dp[day-1]+a[t][day];
					//printf("第%d天花费最少为%d\n",day,a[t][day]); 
				}
			}
		
		//printf("此时组别%d\n",t);	
		}
		if(ans>dp[n])ans=dp[n];
	}
	printf("%lld\n",ans);
	return 0;
}
2021/3/30 09:09
加载中...