思路出的问题不可修改
作者:
大和赤骥
,
2022-08-26 11:11:58
,
所有人可见
,
阅读 170
值得记录的错误
- 本题受高人指点,发现自己想当然了
- 代码内if第一个条件内,虽然f[i][j]与f[i-1][j-a[i]]+1 的数量可能一样,但是代表了不同的情形
#include<bits/stdc++.h>
using namespace std;
const int N = 1010,M = 510,K = 110;
int f[K][N],f2[K][N];
int a[K],b[K];
int n,m,k;
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i = 1;i <= k;i++) scanf("%d%d",&a[i],&b[i]);
int cnt = 0;
for(int i = 1;i <= k;i++)
for(int j = 0;j <= n;j++)
{
f[i][j] = f[i-1][j];
f2[i][j] = f2[i-1][j];
if(j >= a[i] && (f2[i-1][j-a[i]] + b[i]) < m)
{
if(f[i][j] == f[i-1][j-a[i]] + 1)
{
f2[i][j] = min(f2[i][j] , f2[i-1][j-a[i]] + b[i]);
}
else if(f[i][j] > f[i-1][j-a[i]] + 1)
{
;
}
else
{
f[i][j] = f[i-1][j-a[i]] + 1;
f2[i][j] = f2[i-1][j-a[i]] + b[i];
}
}
}
for(int i = 1;i <= k;i++) cout<<f[i][n]<<' ';
cout<<endl;
cout<<f[k][n]<<' '<<m-f2[k][n]<<endl;
return 0;
}