样例没过但是AC,求调
  • 板块P1833 樱花
  • 楼主QWQ_SenLin
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/12/25 19:44
  • 上次更新2023/10/24 06:37:48
查看原帖
样例没过但是AC,求调
670766
QWQ_SenLin楼主2022/12/25 19:44

代码

#include <cstdio>
#include <algorithm>
using namespace std;

int n , qwq;
int v[10005] , a[10005];
int w[10005];
int dp[10005];

int main(void){
    int h1 , m1 , h2 , m2;
    scanf("%d:%d %d:%d %d" , &h1 , &m1 , &h2 , &m2 , &n);
    m1 += h1 * 60;
    m2 += h2 * 60;
    qwq = m2 - m1;
    for(int i = 1;i <= n;i++)
        scanf("%d%d%d" , &w[i] , &v[i] , &a[i]);
    for(int i = 1;i <= n;i++){
        if(a[i] == 0){
            for(int j = w[i];j <= qwq;j++)
                dp[j] = max(dp[j] , dp[j - w[i]] + v[i]);
        }
        else{
            if(a[i] * w[i] >= qwq){
                for(int j = w[i];j <= qwq;j++)
                    dp[j] = max(dp[j - w[j]] + v[j] , dp[j]);
            }
            else{
                int tmp = 1;
                while(true){
                    if(a[i] > tmp){
                        a[i] -= tmp;
                        for(int j = qwq;j >= w[i] * tmp;j--)
                            dp[j] = max(dp[j - w[i] * tmp] + v[i] * tmp , dp[j]);
                        tmp <<= 1;
                        continue;
                    }
                    tmp = a[i];
                    for(int j = qwq;j >= w[i] * tmp;j--)
                        dp[j] = max(dp[j - w[i] * tmp] + v[i] * tmp , dp[j]);
                    break;
                }
            }
        }
    }
    printf("%d\n" , dp[qwq]);
}

不知道为什么样例输出的是6。但是居然过了QAQ。

2022/12/25 19:44
加载中...