您的位置:首页 > 大数据 > 人工智能

lightoj 1223 - Testing Mailboxes 区间DP

2016-04-05 15:03 736 查看
给定n个盒子,然后盒子有个坚固程度,可以抵抗x个炸弹的同时爆炸抵挡不了x+1那么坚固程度就是x。现在给出n个盒子,坚固程度最大可能值为m,问需要多少个炸弹才才能确定精确的坚固程度。

因为T是1W肯定是个打表题。

开始没看懂以为炸弹可以一个一个放,也就是x放上去没炸开,下次在放一个...

参考了窝A的博客:点击打开链接

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 100000007
#define inf 0x3f3f3f3f
ll dp[111][111][111];
int main()
{
memset(dp,0,sizeof(dp));
for(int i=0;i<=100;i++)
{
for(int j=i;j<=100;j++)
dp[1][i][j]=(ll)(i+j)*(j-i+1)/2;
}
for(int i=2;i<=100;i++)
{
for(int j=100;j>=1;j--)
{
for(int k=j;k<=100;k++)
{
dp[i][j][k]=inf;
for(int x=j;x<=k;x++)
{
dp[i][j][k]=min(dp[i][j][k],x+max(dp[i-1][j][x-1],dp[i][x+1][k]));
}
}
}
}
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{
int k,m;
scanf("%d %d",&k,&m);
printf("Case %d: %lld\n",cas,dp[k][1][m]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: