5 条题解
-
2
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int m,s,t;// 法力,距离,时间 struct node { int juli;// 距离 int fali;// 法力 int shanshuo; }dp[300001]; int main() { scanf("%d%d%d",&m,&s,&t); dp[0].fali=m; for(int i=1;i<=t;i++) { if(dp[i-1].fali>=10) { dp[i].fali=dp[i-1].fali-10; dp[i].shanshuo=dp[i-1].shanshuo+60; } else { dp[i].fali=dp[i-1].fali+4; dp[i].shanshuo=dp[i-1].shanshuo; } dp[i].juli=max(dp[i-1].juli+17,dp[i].shanshuo); } if(dp[t].juli>s) { for(int i=0;i<=t;i++) { if(dp[i].juli>s) { printf("Yes\n%d",i); return 0; } } } else { printf("No\n%d",dp[t].juli); return 0; } return 0; }
-
1
# include <bits/stdc++.h> using namespace std; int main (){ int m, s, t, z, dp[300005] = {0}; cin >> m >> s >> t; for (int i = 1; i <= t; i++){ dp[i] = dp[i - 1] + (60 * (m >= 10)); //省去判断 z = m; m -= (10 * (z >= 10)); //省去判断 m += (4 * (z < 10)); //省去判断 } for (int i = 1; i <= t; i++){ dp[i] = max(dp[i], dp[i - 1] + 17); if (dp[i] >= s){ cout << "Yes\n" << i; return 0; } } cout << "No\n" << dp[t]; return 0; }
-
1
来一发滚动数组优化dp
#include <bits/stdc++.h> using namespace std; int n, m, t, sum1, sum2; int main() { freopen("escape.in", "r", stdin); freopen("escape.out", "w", stdout); cin >> m >> n >> t; for (int i = 1; i <= t; i ++) { sum1 += 17; if (m >= 10) m -= 10, sum2 += 60; else m += 4; sum1 = max(sum1, sum2); if (sum1 > n) { printf("Yes\n%d\n", i); return 0; } } printf("No\n%d\n", sum1); return 0; }
-
-5
#include<bits/stdc++.h> using namespace std; int main() { int m,s,t,now=0; cin>>m>>s>>t; int s1=0,s2=0; for(int i=1;i<=t;i++) { s1+=17; if(m>=10) { s2+=60; m-=10; } else m+=4; if(s2>s1) s1=s2; if(s1>s) { cout<<"Yes"<<endl<<i<<endl; return 0; } } cout<<"No"<<endl<<s1<<endl; return 0; }
- 1
信息
- ID
- 5
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 151
- 已通过
- 73
- 上传者