简单dp洛谷P2347 砝码称重

    xiaoxiao2025-08-13  4

    P2347 砝码称重 题目描述 设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重 \le 1000≤1000),

    输入输出格式 输入格式: 输入方式:a1 , a2 ,a3 , a4 , a5 ,a6

    ​ (表示1g砝码有1个,2g砝码有 2个,…,20g砝码有 6个)

    输出格式: 输出方式:Total=NTotal=N (NN表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)

    输入输出样例 输入样例#1: 1 1 0 0 0 0 输出样例#1: Total=3

    #include<bits/stdc++.h> using namespace std; int v, n, c = 0; const int maxn = 2e6 + 5; int dp[maxn]; int v1[maxn], c1[6] = {1,2,3,5,10,20}; void bag01(int cost) { int m; for(m = c; m >= cost; --m){ dp[m] = max(dp[m], dp[m - cost] + cost); } } int main(){ int ans = 0; for(int i = 0; i < 6; i++){ //cout << i << endl; int z; scanf("%d",&z); int sum = 0; c += z * c1[i]; // for(int j = 0; j < z; j++){ v1[ans] = c1[i]; ans++; } } for(int i = 0; i < ans; i++){ //cout << v1[i] << endl; bag01(v1[i]); } int sum1 = 0; for (int i = 1;i <= c; i++) if (dp[i] == i) sum1++;//必须dp[i] == i 如果只是不为0会wa 我wa了好几发发现的问题 cout << "Total=" << sum1 << endl; }

    其实还是一道水题啦

    最新回复(0)