滴,集训第十五天打卡。
哎呀..回家了一趟落下了一大截啊...容我慢慢补起来~~
训练也到了第九章,dp。
uva 11400 Lighting System Design
题目大意:设计一个照明系统,有N种灯泡可以选择,不同种类的灯必须用不同的电源,但同一种灯泡可以共用一个电源。每种灯泡有电压V,电源费用K,每个灯泡的费用C和所需灯泡数量L。为了省钱,可以把一些灯泡换成电压更高的另一种灯泡来节省电源的钱。
思路:每种电压的灯泡,要么全换,要么全不换。先把灯泡按电压从小到大排序,那么前面的都能换后面的。设s[i]为前i种灯泡的总数量,dp[i]为灯泡1-i的最小开销,则dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*f[i].c+f[i].k)。
#include
#include
#include
using namespace std;
struct sb
{
int v,k,c,l;
}f[1005];
bool cmp(sb u,sb w)
{
return u.v
UVA 12563 Jin Ge Jin Qu hao
题目大意:在KTV唱歌,剩下t秒时间,可以唱n首歌曲中的一些。使得唱的总曲目尽量多。(留下1s唱劲歌金曲)
思路:01背包问题。分别设置歌曲数目和时长两个数组。因为最多50首歌,每首歌最长180s,所以数组设置10000足够了。
#include
#include
int num[10001],times[10001];
int main()
{
int t,n,m,i,j,o=1,s,a[105];
scanf("%d",&t);
while(t--)
{
s=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
s+=a[i];
}
printf("Case %d: ",o++);
if(s=a[i];j--)
{
if(num[j]==num[j-a[i]]+1)
{
if(times[j]