https://neooj.com/oldoj/problem.php?id=1506
30%的数据满足n< =15,m< =2
动态规划的一道题。(脑补了很多评价但是没有说出来)
输入没问题。
状态就设置dp[i][j]为第i圈第j种轮子的最小时间。
然后我们再考虑设置一个变量mint,存上一圈的最小值。(动归中要用,注意这里的最小值跟轮子没关系)
剩下的我不解释了,看代码把。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m,c,mint,ans; int t[1001][1001]; int dp[1001][1001]; int main() { scanf("%d%d%d",&n,&m,&c); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&t[i][j]); memset(dp,0x3f,sizeof(dp)); mint=1000000000; for(int i=1;i<=m;i++) dp[1][i]=t[1][i]; for(int i=2;i<=n;i++) { mint=1000000000; for(int k=1;k<=m;k++) mint=min(mint,dp[i-1][k]); for(int j=1;j<=m;j++) dp[i][j]=min(dp[i-1][j],mint+c)+t[i][j]; } ans=1000000000; for(int i=1;i<=m;i++) ans=min(ans,dp[n][i]); printf("%d",ans); return 0; }
原文:https://www.cnblogs.com/fusiwei/p/11237879.html