01揹包問題變形
}將狀態轉移矩陣改為1維的時候,出現問題
錯**:
#includeusing namespace std;
#define ll long long
const int n = 1010;
int win[n], lose[n], use[n];
int f[n];
int n, x;
int main()
}cout << (ll) f[x] * 5 << endl;
return 0;
}
錯在這個地方:
f[j] += lose[i];
if(j >= use[i]) f[j] = max(f[j], f[j - use[i]] + win[i]);
這個地方對於use[i] != 0沒有問題,但是對於use[i] = 0的情況必錯,因為當use[i] = 0時,先將原本的f[j] += lose[i], 當j >= 0時,f[j] = max(f[j], f[j] + win[i]);此處f[j]必被更新為f[j] + win[i], 即被更新成原本的f[j] + win[i] + lose[i], 顯然錯。
正確**:
#includeusing namespace std;
#define ll long long
const int n = 1010;
int win[n], lose[n], use[n];
int f[n];
int n, x;
int main()
f[j] = max(f[j] + lose[i], f[j - use[i]] + win[i]);}}
cout << (ll) f[x] * 5 << endl;
return 0;
}
P1802 5倍經驗日 題解
傳送門 現在樂鬥有活動了!每打乙個人可以獲得5倍經驗!absi2011卻無奈的看著那一些比他等級高的好友,想著能否把他們乾掉。乾掉能拿不少經驗的。現在absi2011拿出了x個迷你裝藥物 嗑藥打人可恥 準備開始與那些人打了 由於迷你裝乙個只能管一次,所以absi2011要謹慎的使用這些藥,悲劇的是,...
洛谷P1802 5倍經驗日
現在樂鬥有活動了!每打乙個人可以獲得5倍經驗!absi2011卻無奈的看著那一些比他等級高的好友,想著能否把他們乾掉。乾掉能拿不少經驗的。現在absi2011拿出了x個迷你裝藥物 嗑藥打人可恥 準備開始與那些人打了 由於迷你裝乙個只能管一次,所以absi2011要謹慎的使用這些藥,悲劇的是,沒到達最...
洛谷 P1802 5倍經驗日
現在樂鬥有活動了!每打乙個人可以獲得5倍經驗!absi2011卻無奈的看著那一些比他等級高的好友,想著能否把他們乾掉。乾掉能拿不少經驗的。現在absi2011拿出了x個迷你裝藥物 嗑藥打人可恥 準備開始與那些人打了 由於迷你裝乙個只能管一次,所以absi2011要謹慎的使用這些藥,悲劇的是,沒到達最...