Ciao, scusate il titolo del topic poco informativo ma sono abbastanza confuso dal mio problema.
Non sto a specificare come sono arrivato ai codici ma non capisco come due codici che reputo essere equivalenti diano 65/100 e 100/100. (spoiler, per coloro che non l’hanno ancora risolto, provate prima di leggere la soluzione)
Questo codice fa 65/100
#include <stdio.h>
#include <assert.h>
// constraints
#define MAXN 5000
#define MAXX 10000
// input data
int N, X, i, j;
int P[MAXN], Q[MAXN];
int r[MAXX];
int oldR[MAXX];
int main() {
// uncomment the following lines if you want to read/write from files
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
assert(2 == scanf("%d %d", &N, &X));
for(i=0; i<N; i++)
assert(2 == scanf("%d %d", &P[i], &Q[i]));
// insert your code here
for(i=0;i<N;++i){
for(j=Q[i];j<=X;++j){
if(P[i]+oldR[j-Q[i]]>r[j]){
r[j] = P[i]+oldR[j-Q[i]];
}
}
for(j=Q[i];j<=X;++j) oldR[j] = r[j];
}
/*for(i=0;i<=X;++i){
}*/
printf("%d\n", r[X]); // print the result
return 0;
}
Mentre questo fa 100/100
#include <stdio.h>
#include <assert.h>
// constraints
#define MAXN 5000
#define MAXX 10000
// input data
int N, X, i, j;
int P[MAXN], Q[MAXN];
int r[MAXX];
int oldR[MAXX];
int main() {
// uncomment the following lines if you want to read/write from files
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
assert(2 == scanf("%d %d", &N, &X));
for(i=0; i<N; i++)
assert(2 == scanf("%d %d", &P[i], &Q[i]));
// insert your code here
for(i=0;i<N;++i){
for(j=Q[i];j<=X;++j){
if(P[i]+oldR[j-Q[i]]>r[j]){
r[j] = P[i]+oldR[j-Q[i]];
}
}
for(j=Q[i];j<=X;++j) oldR[j] = r[j];
}
for(i=0;i<=X;++i){
}
printf("%d\n", r[X]); // print the result
return 0;
}
E l’unica cosa che cambia è il ciclo for alla fine. Non capisco come quel ciclo possa modificare il punteggio che riesco a fare?