本人水平有限,題解不到為處,請多多諒解
本蒟蒻謝謝大家**
題目:market
(market.c/cpp/pas)
input fifile: market.in
output fifile: market.out
time limit: 1 seconds
memory limit: 128 megabytes
在位元鎮一共有 n 家商店,編號依次為 1 到 n。每家商店只會賣一種物品,其中第 i 家商店的物品
單價為 ci,價值為 vi,且該商店開張的時間為 ti。
byteasar 計畫進行 m 次購物,其中第 i 次購物的時間為 ti,預算為 mi。每次購物的時候,byteasar
會在每家商店購買最多一件物品,當然他也可以選擇什麼都不買。如果購物的時間早於商店開張的時間,
那麼顯然他無法在這家商店進行購物。
現在 byteasar 想知道,對於每個計畫,他最多能購入總價值多少的物品。請寫乙個程式,幫助
byteasar 合理安排購物計畫。
注意:每次所花金額不得超過預算,預算也不一定要花完,同時預算不能留給其它計畫使用。
input
第一行包含兩個正整數 n, m,表示商店的總數和計畫購物的次數。
接下來 n 行,每行三個正整數 ci , vi , ti,分別表示每家商店的單價、價值以及開張時間。
接下來 m 行,每行兩個正整數 ti , mi,分別表示每個購物計畫的時間和預算。
output
輸出 m 行,每行乙個整數,對於每個計畫輸出最大可能的價值和。
examples
market.in market.out
輸入:
5 25 5 4
1 3 1
3 4 3
6 2 2
4 3 2
3 85 9
輸出:
1012
第乙個計畫可以在商店 2,3,5 各購買一件物品,總花費為 1 + 3 + 4 = 8,總價值為 3 + 4 + 3 = 10。
第二個計畫可以在商店 1,2,3 各購買一件物品,總花費為 5 + 1 + 3 = 9,總價值為 5 + 3 + 4 = 12。
40分演算法
直接揹包 把總花費當做容量,總價值當做val ,再特判一下時間即可
設 f 為容量小於等於mi 的最大價值和
code:
#include#pragma gcc optimize(3)100分做法:離線dp+二分using
namespace
std;
int n,m,sum=0,ans=0
;int f[1000001
];inline
intread()
while(isdigit(ch))
return x*f;
}struct
ooa[
100010
];struct
nodeb[
100010
];bool
cmp(oo a,oo b)
bool
comp(node a,node b)
intmain()
for(int i=1;i<=m;i++)
sort(a+1,a+n+1
,cmp);
//sort(b+1,b+m+1,comp);
//f[0][0]=0;
f[0]=0
;
for(int j=1;j<=m;j++)
}//ans+=f[n][b[j].mm];
} printf(
"%d\n
",f[b[j].mm]);
}return0;
}/*5 25 5 4
1 3 1
3 4 3
6 2 2
4 3 2
3 85 9
*/
c[i](花費)很大但v[i](獲得的價值)很小,
f[j]表示獲利恰好為j時,所用的最小化費(初始設為正無窮)
方程f[j]=min(f[j],f[j-v[i]]+c[i])
於是對於每乙個詢問m,直接從後往前掃瞄,找到第乙個小於等於m的值,其下標就是答案
這裡這麼設定主要是因為考慮到60%時候的方程,當m變大時,v依然很小,於是考慮把下標和陣列的值更換一下位置
code:
#include#pragma gcc optimize(3)#define n 503
#define ll long long
using
namespace
std;
int n,m,ans[100003
];ll f[n*n];
inline
intread()
while(isdigit(ch))
return x*f;
}struct
datab[
100003
],a[n],c[n];
intcmp(data a,data b)
intcmp1(data a,data b)
int calc(int
x)
else
}return
ans;
}int
main()
t++;}}
for (int i=1;i<=m;i++)
printf(
"%d\n
",ans[i]);
return0;
}
dp 二分查詢dp判斷
題意 掃雷,在長度為 lenght 的街道上有 n 個地雷,再輸入每個地雷在街道上的位置,1 lenght 1e9,1 n 2000 現有排雷範圍為w,2w的一次性排雷裝置,1 w,分別由p q個。現問w的值至少為多大。思路 先二分找w,對於每次二分的值寫乙個函式進行判斷。用dp來判斷,設dp式 d...
6 13校內互測 DP 帶權二分 斜率優化
丘中有麻plant 改自這兒,by zbq。還有隱藏的一頁不放了。直接走下去的話,如果開始時間確定那麼到每個點的時間確定,把time減去dis就可以去掉路程的影響了。這樣對於減去d後的t,如果想要摘一部分,那麼應是取其中最大的t恰好摘它,其它t較小的會早熟然後等著。意會一下吧 所以t大的會對t小的產...
中位數(DP 二分)
單點時限 10.0 sec 記憶體限制 256 mb 你的地圖是一張白紙,所以即使想決定目的地,也不知道路在 qq 小方最近在自學圖論。他突然想出了乙個有趣的問題 一張由 n 個點,m 條邊構成的有向無環圖。每個點有點權 ai。qq 小方想知道所有起點為 1 終點為 n 的路徑中最大的中位數是多少。...