5 条题解

  • 2
    @ 2022-7-11 12:20:06
    #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
      @ 2025-7-21 12:43:41
      # 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
        @ 2022-7-20 8:50:32

        来一发滚动数组优化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;
        }
        
        • -3
          @ 2025-7-4 13:38:29

          6

          • @ 2025-7-11 15:55:56

            为什么有差评啊?

        • -5
          @ 2025-4-6 15:20:46

          #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
          上传者