HDu 1735ワード統計
タイトルリンク:http://acm.hdu.edu.cn/showproblem.php?pid=1735
この問題はネット上のある大神の考え方とコードを参考にしたものだ.
私は考えを言います:まずansで0の個数を格納して、それから段の尾の行の0の個数(b[]配列の中で)を記録して、題の中で全部でmの段があって、それでは段の頭は全部で2*mの汚濁されていない格子があって、また、最後の行はきっと段の尾で、ans-=2*mで、ans-=num;それから貪欲な思想で、少なくとも、私たちは断尾0になる可能性がある個数を減らすのが一番多いです.のわからなければ下のリンクを直接クリック..
この大神から来ました.http://blog.csdn.net/snowy_smile/article/details/49666233
コード:
この問題はネット上のある大神の考え方とコードを参考にしたものだ.
私は考えを言います:まずansで0の個数を格納して、それから段の尾の行の0の個数(b[]配列の中で)を記録して、題の中で全部でmの段があって、それでは段の頭は全部で2*mの汚濁されていない格子があって、また、最後の行はきっと段の尾で、ans-=2*mで、ans-=num;それから貪欲な思想で、少なくとも、私たちは断尾0になる可能性がある個数を減らすのが一番多いです.のわからなければ下のリンクを直接クリック..
この大神から来ました.http://blog.csdn.net/snowy_smile/article/details/49666233
コード:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[105];
int b[10005];
int n,l,m;
int main()
{
while(~scanf("%d%d%d",&n,&l,&m))
{
int ans = 0;
int num = 0;
int ed = 0;
for(int i = 1; i <= n; ++i)
{
for(int j = 1;j <= l;++j){
scanf("%d",&a[j]);
if(a[j] == 0)
ans++;
}
if(!a[1] && !a[2])
b[++ed] = num;
for(int j = l; j >= 1; --j)
{
if(a[j] == 1)
{
num = l - j;
break;
}
}
}
ans -= 2 * m;
ans -= num;
sort(b + 1,b + ed + 1);
for(int i = ed; i >= ed - (m - 2); --i)
ans -= b[i];
printf("%d
",ans);
}
return 0;
}